diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..3f050aa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,43 @@ +name: Bug report +description: Something isn't working +labels: [bug] +body: + - type: textarea + id: what-happened + attributes: + label: What happened? + description: What went wrong, and what did you expect instead? + validations: + required: true + - type: textarea + id: repro + attributes: + label: Steps to reproduce + placeholder: | + 1. Call tool `share_port` with `{...}` + 2. ... + validations: + required: true + - type: input + id: version + attributes: + label: Package version + placeholder: "0.1.1" + validations: + required: true + - type: input + id: client + attributes: + label: MCP client + placeholder: Claude Desktop, Cursor, Claude Code, ... + - type: input + id: os + attributes: + label: OS and Tailscale version + placeholder: "Windows 11, tailscale 1.80.x" + - type: textarea + id: error + attributes: + label: Tool error output + description: The structured error (`code` / `remedy`) if one was returned. + render: json diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..d15ed64 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: Security vulnerability + url: https://github.com/TMHSDigital/tailscale-mcp/security/advisories/new + about: Please report security issues privately, not as public issues. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..938bbb6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,22 @@ +name: Feature request +description: Suggest a new tool or improvement +labels: [enhancement] +body: + - type: textarea + id: problem + attributes: + label: Problem + description: What are you trying to do that you can't today? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed solution + description: What should the tool look like? Include example inputs/outputs if you can. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Alternatives considered diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..e4ad38e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ +# Summary + + + +## Checklist + +- [ ] Conventional commit title (`feat:`, `fix:`, `chore:`, `docs:`) +- [ ] Version bumped in `package.json` (`npm version patch|minor` — release.yml tags and publishes on merge) +- [ ] `mcp-tools.json` updated if tools were added/removed/renamed +- [ ] `npm run build && npm test && npm run typecheck` pass locally +- [ ] README updated if user-facing behavior changed diff --git a/.github/workflows/label-sync.yml b/.github/workflows/label-sync.yml index 89fa789..9d31f81 100644 --- a/.github/workflows/label-sync.yml +++ b/.github/workflows/label-sync.yml @@ -30,12 +30,12 @@ jobs: run: | LABELS="" - if echo "$FILES" | grep -q "^skills/"; then - LABELS="$LABELS skills" + if echo "$FILES" | grep -q "^src/"; then + LABELS="$LABELS code" fi - if echo "$FILES" | grep -q "^rules/"; then - LABELS="$LABELS rules" + if echo "$FILES" | grep -qE "^(test|tests)/|^src/__tests__/"; then + LABELS="$LABELS tests" fi if echo "$FILES" | grep -q "^docs/"; then diff --git a/.gitignore b/.gitignore index 06c2f88..f0b29dc 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ build/ Thumbs.db *.log _harness.mjs +CLAUDE.md diff --git a/CHANGELOG.md b/CHANGELOG.md index a6543fc..f20b9d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to Tailscale MCP will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/). +## [0.1.2] - 2026-07-14 + +### Changed + +- README badges: dynamic npm version badge and CI status badge (the version badge was hardcoded to 0.1.0) +- SECURITY.md now directs reports to GitHub private vulnerability reporting instead of a placeholder email +- PR auto-labeling matches this repo's paths (`src/`, tests) instead of inherited `skills/`/`rules/` paths + +### Added + +- Issue templates (bug report, feature request) and a pull request template + ## [0.1.1] - 2026-07-14 First published release: everything listed under 0.1.0 below ships in this version. (The v0.1.0 tag was consumed by the initial scaffold before the tool surface landed, so the first npm publish is 0.1.1.) diff --git a/README.md b/README.md index b09e1ed..1ba3f8d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ **MCP server for safe programmatic access to the local Tailscale daemon: tailnet discovery, SSH config generation, port sharing via Serve/Funnel, and latency matrices.** ![License: CC-BY-NC-ND-4.0](https://img.shields.io/badge/license-CC--BY--NC--ND--4.0-green) -![Version](https://img.shields.io/badge/version-0.1.0-blue) +[![npm version](https://img.shields.io/npm/v/%40tmhs%2Ftailscale-mcp)](https://www.npmjs.com/package/@tmhs/tailscale-mcp) +[![CI](https://github.com/TMHSDigital/tailscale-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/TMHSDigital/tailscale-mcp/actions/workflows/ci.yml) --- diff --git a/SECURITY.md b/SECURITY.md index d6f8f23..bd43c7a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ If you discover a security vulnerability in Tailscale MCP, please report it resp **Do not** open a public issue for security vulnerabilities. -Instead, email contact@users.noreply.github.com with: +Instead, use [GitHub private vulnerability reporting](https://github.com/TMHSDigital/tailscale-mcp/security/advisories/new) ("Report a vulnerability" under the Security tab) and include: 1. Description of the vulnerability 2. Steps to reproduce diff --git a/package-lock.json b/package-lock.json index 130a6b8..72b8244 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@tmhs/tailscale-mcp", - "version": "0.1.1", + "version": "0.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tmhs/tailscale-mcp", - "version": "0.1.1", + "version": "0.1.2", "license": "CC-BY-NC-ND-4.0", "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", diff --git a/package.json b/package.json index 5152b66..3b01bd9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tmhs/tailscale-mcp", - "version": "0.1.1", + "version": "0.1.2", "description": "MCP server for safe programmatic access to the local Tailscale daemon: tailnet discovery, SSH config generation, port sharing via Serve/Funnel, and latency matrices.", "type": "module", "main": "dist/index.js",