mcpField
D
dear-claude

dear-claude

本地服务
github.com/sns45AI 与智能体09 周前更新

关于 dear-claude

dear-claude 是一个 MCP 服务,可在配置的平台出现“Dear Claude”时启动本地 Claude Code 实例。它读取项目工具中的上下文、将结果发回来源平台,并支持会话保留和跨平台编排。

主要功能

  1. 01短语触发本地实例
  2. 02处理任务与笔记上下文
  3. 03结果回传来源平台
  4. 04会话保留七天
  5. 05跨平台实例编排

适用场景

  1. 01将 Linear 任务转为代码修改
  2. 02请求 GitHub 拉取请求审查
  3. 03将 Obsidian 笔记转成 Linear 任务
  4. 04在独立分支上并行开展工作

MCP 相关

该服务提供用于启动 Claude Code 实例和协调任务的 MCP 工具。它通过 Webhook 或 Obsidian 文件系统监视连接外部平台。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sns45-dear-claude": {
"command": "npx",
"args": [
"-y",
"dear-claude"
],
"env": {
"DEAR_CLAUDE_PORT": "<DEAR_CLAUDE_PORT>",
"DEAR_CLAUDE_HOST": "<DEAR_CLAUDE_HOST>",
"DEAR_CLAUDE_DATA_DIR": "<DEAR_CLAUDE_DATA_DIR>",
"DEAR_CLAUDE_API_TOKEN": "<DEAR_CLAUDE_API_TOKEN>",
"TAILSCALE_HOSTNAME": "<TAILSCALE_HOSTNAME>",
"GITHUB_CLIENT_ID": "<GITHUB_CLIENT_ID>",
"GITHUB_CLIENT_SECRET": "<GITHUB_CLIENT_SECRET>",
"GITHUB_WEBHOOK_SECRET": "<GITHUB_WEBHOOK_SECRET>",
"GITHUB_ACCESS_TOKEN": "<GITHUB_ACCESS_TOKEN>",
"GITHUB_APP_ID": "<GITHUB_APP_ID>",
"GITHUB_APP_PRIVATE_KEY_PATH": "<GITHUB_APP_PRIVATE_KEY_PATH>",
"LINEAR_CLIENT_ID": "<LINEAR_CLIENT_ID>",
"LINEAR_CLIENT_SECRET": "<LINEAR_CLIENT_SECRET>",
"LINEAR_WEBHOOK_SECRET": "<LINEAR_WEBHOOK_SECRET>",
"LINEAR_ACCESS_TOKEN": "<LINEAR_ACCESS_TOKEN>",
"JIRA_DOMAIN": "<JIRA_DOMAIN>",
"JIRA_USER_EMAIL": "<JIRA_USER_EMAIL>",
"JIRA_API_TOKEN": "<JIRA_API_TOKEN>",
"JIRA_WEBHOOK_SECRET": "<JIRA_WEBHOOK_SECRET>",
"GITLAB_ACCESS_TOKEN": "<GITLAB_ACCESS_TOKEN>",
"GITLAB_WEBHOOK_SECRET": "<GITLAB_WEBHOOK_SECRET>",
"NOTION_CLIENT_ID": "<NOTION_CLIENT_ID>",
"NOTION_CLIENT_SECRET": "<NOTION_CLIENT_SECRET>",
"NOTION_ACCESS_TOKEN": "<NOTION_ACCESS_TOKEN>",
"NOTION_WEBHOOK_SECRET": "<NOTION_WEBHOOK_SECRET>",
"OBSIDIAN_VAULT_PATH": "<OBSIDIAN_VAULT_PATH>",
"GIPHY_API_KEY": "<GIPHY_API_KEY>"
}
}
}
}
启动命令npx -y dear-claude
需要配置的环境变量
DEAR_CLAUDE_PORTHTTP server port for webhooks (default: 3334)
DEAR_CLAUDE_HOSTBind address for the HTTP server (default: 127.0.0.1, loopback only)
DEAR_CLAUDE_DATA_DIROverride the data directory (default: $XDG_DATA_HOME/dear-claude or ~/.local/share/dear-claude)
DEAR_CLAUDE_API_TOKEN密钥Token guarding the /api/* and /mcp control endpoints (auto-generated at <dataDir>/api-token if unset)
TAILSCALE_HOSTNAMEOverride Tailscale hostname for webhook URLs (auto-detected if not set)
GITHUB_CLIENT_IDGitHub OAuth App or GitHub App client ID
GITHUB_CLIENT_SECRET密钥GitHub OAuth App or GitHub App client secret
GITHUB_WEBHOOK_SECRET密钥GitHub webhook signature secret
GITHUB_ACCESS_TOKEN密钥GitHub personal access token (alternative to OAuth)
GITHUB_APP_IDGitHub App ID (for installation-based auth)
GITHUB_APP_PRIVATE_KEY_PATH密钥Path to GitHub App private key PEM file
LINEAR_CLIENT_IDLinear OAuth application client ID
LINEAR_CLIENT_SECRET密钥Linear OAuth application client secret
LINEAR_WEBHOOK_SECRET密钥Linear webhook signing secret
LINEAR_ACCESS_TOKEN密钥Linear personal API key (alternative to OAuth)
JIRA_DOMAINJira Cloud domain (e.g. 'mycompany' for mycompany.atlassian.net)
JIRA_USER_EMAILJira account email for API authentication
JIRA_API_TOKEN密钥Jira API token from id.atlassian.com
JIRA_WEBHOOK_SECRET密钥Shared secret for Jira webhook URL validation
GITLAB_ACCESS_TOKEN密钥GitLab personal or project access token
GITLAB_WEBHOOK_SECRET密钥GitLab webhook secret token
NOTION_CLIENT_IDNotion OAuth integration client ID
NOTION_CLIENT_SECRET密钥Notion OAuth integration client secret
NOTION_ACCESS_TOKEN密钥Notion internal integration token (alternative to OAuth)
NOTION_WEBHOOK_SECRET密钥Notion webhook verification secret
OBSIDIAN_VAULT_PATHAbsolute path to Obsidian vault directory for file watching
GIPHY_API_KEY密钥Giphy API key for embedding GIF reactions in responses

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmdear-claude1.2.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

亲爱的 Claude——只需说一声亲爱的 Claude

亲爱的 Claude

一个 MCP 服务,可从外部平台触发本地 Claude Code 实例。
在 Linear、GitHub、Jira、GitLab、Notion 或 Obsidian 中说一声“亲爱的 Claude”——Claude Code 实例就会启动并处理任务。

你的笔记化为架构。你的任务化为拉取请求。


这是什么?

Dear Claude 是一个 MCP(Model Context Protocol)服务,会监视你的项目管理工具,查找短语 “Dear Claude”。检测到后,它会启动一个本地 Claude Code 实例,以便:

  • 读取问题/评论/笔记的上下文
  • 执行所请求的任务(编写代码、审查、创建任务等)
  • 将结果发回原平台
  • 将会话保留 7 天,以便进行多轮对话

**无需 Anthropic API 密钥。**可使用你现有的 Claude Code 订阅。100% 本地且私密——你的代码绝不会离开你的设备。

支持的平台

平台在问题/PR 上触发在评论中触发回帖表情反应子任务PR/MR 审查
GitHub是是是是-是
Linear是是是是是-
Jira是是是-是-
GitLab是是是是-是
Notion是是是---
Obsidian是-是---

跨平台编排

来自任何平台的实例都可以访问所有已配置平台的 API。这可以实现如下工作流:

  1. 在 Obsidian 中编写规范 → “亲爱的 Claude,在 Linear 中创建这些任务”
  2. 在 Linear 上讨论 → “亲爱的 Claude,在 GitHub 上编写此代码”
  3. 在 GitHub 上审查 → “亲爱的 Claude,解决这些合并冲突”
  4. 并行编码 → Claude 启动多个实例,每个分支对应一个实例,并使用 git worktrees

快速开始

一行安装
claude mcp add dear-claude -- bunx dear-claude start --mcp

就这样。启动 Claude Code,Dear Claude 即可使用。

前置条件
  • 已安装 Claude Code CLI(可用 claude 命令)
  • Bun 运行时(用于 bunx)
  • 已启用 Funnel 的 Tailscale(用于接收外部平台的 Webhook)
手动设置(替代方式)

如果你更喜欢手动配置,请在 ~/.claude.json 的 mcpServers 下添加:

{
  "mcpServers": {
    "dear-claude": {
      "command": "bunx",
      "args": ["dear-claude", "start", "--mcp"],
      "env": {
        "DEAR_CLAUDE_PORT": "3334",
        "GITHUB_CLIENT_ID": "...",
        "GITHUB_CLIENT_SECRET": "...",
        "GITHUB_WEBHOOK_SECRET": "...",
        "LINEAR_CLIENT_ID": "...",
        "LINEAR_CLIENT_SECRET": "...",
        "LINEAR_WEBHOOK_SECRET": "..."
      }
    }
  }
}

然后启动 Claude Code:

claude

MCP 服务会自动启动、设置 Tailscale Funnel,并显示你的公开 Webhook URL。


平台设置

Tailscale Funnel

Dear Claude 使用 Tailscale Funnel 获取稳定的公开 HTTPS URL,以接收 Webhook。设置过程大多会自动完成。

  1. 安装 Tailscale:

    # macOS
    brew install tailscale
    
    # Linux
    curl -fsSL https://tailscale.com/install.sh | sh
    
  2. 进行身份验证:tailscale up

  3. 在管理控制台中启用 Funnel:https://login.tailscale.com/admin/acls

    • 在 ACL 策略中添加 "funnel" 功能
  4. 服务启动时会自动配置 Funnel。你的公开 URL 为:

    https://<your-hostname>.ts.net/dc
    

提示:运行 tailscale serve status --json 以验证配置。健康检查每 10 秒自动修复一次 Funnel 配置。


GitHub
选项 A:GitHub App(推荐)
  1. 前往 GitHub Settings → Developer settings → GitHub Apps → New GitHub App
  2. 设置以下字段:
    • Homepage URL:https://<your-hostname>.ts.net/dc
    • Callback URL:https://<your-hostname>.ts.net/dc/oauth/callback/github
    • Webhook URL:https://<your-hostname>.ts.net/dc/webhook/github
    • Webhook secret:生成一个随机字符串
  3. 在 Permissions 下:
    • 仓库:Issues(读取与写入)、Pull Requests(读取与写入)、Contents(读取与写入)
  4. 在 Subscribe to events 下:
    • Issue 评论、Pull request review 评论
  5. 复制凭据并设置环境变量:
    GITHUB_CLIENT_ID=Iv1.abc123...
    GITHUB_CLIENT_SECRET=abc123...
    GITHUB_WEBHOOK_SECRET=your-webhook-secret
    
  6. 在你的仓库上安装此应用
  7. 完成 OAuth:访问 https://<your-hostname>.ts.net/dc/setup/github
选项 B:Personal Access Token(更简单,无 Webhook)
  1. 前往 GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
  2. 创建一个具有以下范围的令牌:repo、write:discussion
  3. 设置:GITHUB_ACCESS_TOKEN=ghp_...

注意:仅使用 PAT 不会触发由 Webhook 启动的实例。你可以改用 spawn_instance MCP 工具或 /api/spawn 端点。

环境变量说明
GITHUB_CLIENT_IDGitHub App 客户端 ID
GITHUB_CLIENT_SECRETGitHub App 客户端密钥
GITHUB_WEBHOOK_SECRETWebhook 签名验证密钥
GITHUB_ACCESS_TOKEN个人访问令牌(OAuth 的替代方式)

Linear
  1. 前往 Linear Settings → API → OAuth Applications → New Application
  2. 设置回调 URL:https://<your-hostname>.ts.net/dc/oauth/callback/linear
  3. 复制 Client ID 和 Client Secret
  4. 在 OAuth 应用中启用 Webhooks 开关
  5. 前往 Linear Settings → API → Webhooks → New Webhook:
    • URL:https://<your-hostname>.ts.net/dc/webhook/linear
    • 复制 Signing Secret
    • 启用事件:Comments(创建)、Issues(创建、更新)
  6. 设置环境变量:
    LINEAR_CLIENT_ID=your-client-id
    LINEAR_CLIENT_SECRET=your-client-secret
    LINEAR_WEBHOOK_SECRET=your-signing-secret
    
  7. 完成 OAuth:访问 https://<your-hostname>.ts.net/dc/setup/linear

完成 OAuth 后,只有来自你已通过身份验证的 Linear 账户的 issue/评论才会触发 Claude。

替代方式:在 Linear Settings → Account → API 中使用个人 API 密钥(LINEAR_ACCESS_TOKEN=lin_api_...)。

环境变量说明
LINEAR_CLIENT_IDOAuth 客户端 ID
LINEAR_CLIENT_SECRETOAuth 客户端密钥
LINEAR_WEBHOOK_SECRETWebhook 签名密钥
LINEAR_ACCESS_TOKEN个人 API 密钥(OAuth 的替代方式)

Jira Cloud
  1. 在 https://id.atlassian.com/manage-profile/security/api-tokens 创建 API 令牌
  2. 设置环境变量:
    JIRA_DOMAIN=mycompany              # Your Jira subdomain (mycompany.atlassian.net)
    [email protected]    # Your Atlassian account email
    JIRA_API_TOKEN=ATATT3x...          # The API token you just created
    JIRA_WEBHOOK_SECRET=optional-secret # Optional shared secret
    
  3. 在 Jira 中创建 Webhook:
    • 前往 Jira Admin → System → Webhooks → Create webhook
    • URL:https://<your-hostname>.ts.net/dc/webhook/jira
      • 如果使用 JIRA_WEBHOOK_SECRET,请追加:?secret=YOUR_SECRET
    • 选择事件:issue_created、issue_updated、comment_created
  4. 保存 Webhook

Claude 可以通过 Jira REST API v2 创建子任务、变更 issue 状态并添加评论。

环境变量说明
JIRA_DOMAINJira 子域名(例如,mycompany.atlassian.net 中的 mycompany)
JIRA_USER_EMAIL你的 Atlassian 邮箱
JIRA_API_TOKENAtlassian 提供的 API 令牌
JIRA_WEBHOOK_SECRET用于 Webhook 验证的可选共享密钥

GitLab
  1. 在 GitLab → Settings → Access Tokens 中创建个人访问令牌
    • 范围:api、read_repository、write_repository
  2. 设置环境变量:
    GITLAB_ACCESS_TOKEN=glpat-...
    GITLAB_WEBHOOK_SECRET=your-secret
    
  3. 为你的项目(或群组)添加 Webhook
    • 前往 Settings → Webhooks
    • URL:https://<your-hostname>.ts.net/dc/webhook/gitlab
    • 密钥令牌:与 GITLAB_WEBHOOK_SECRET 相同
    • 触发事件:Comments、Issues events、Merge request events
  4. 保存

对于自托管的 GitLab,还需设置 GITLAB_URL=https://your-gitlab-instance.com。

环境变量说明
GITLAB_ACCESS_TOKEN个人访问令牌
GITLAB_WEBHOOK_SECRETWebhook 密钥令牌
GITLAB_URLGitLab 实例 URL(默认值:https://gitlab.com)

Notion
选项 A:内部集成(更简单)
  1. 前往 https://www.notion.so/my-integrations → New integration
  2. 为集成命名并选择你的工作区
  3. 复制 Internal Integration Secret
  4. 设置:NOTION_ACCESS_TOKEN=ntn_...
  5. 与集成共享页面/数据库(点击页面上的 "..." → Connections → Add your integration)
选项 B:OAuth(公共应用)
  1. 在 https://www.notion.so/my-integrations 创建 OAuth 集成
  2. 设置回调 URL:https://<your-hostname>.ts.net/dc/oauth/callback/notion
  3. 设置环境变量:
    NOTION_CLIENT_ID=your-client-id
    NOTION_CLIENT_SECRET=your-secret
    
  4. 完成 OAuth:访问 https://<your-hostname>.ts.net/dc/setup/notion
Webhook 设置

Notion 目前还没有原生 Webhook。要从 Notion 触发 Claude:

  • 使用 Notion 的自动化规则和 Webhook 操作(如果可用)
  • 或使用 Zapier/Make 等第三方服务,向 https://<your-hostname>.ts.net/dc/webhook/notion 发送 POST 请求
  • 如果需要验证签名,请设置 NOTION_WEBHOOK_SECRET
环境变量说明
NOTION_ACCESS_TOKEN内部集成令牌
NOTION_CLIENT_IDOAuth 客户端 ID
NOTION_CLIENT_SECRETOAuth 客户端密钥
NOTION_WEBHOOK_SECRETWebhook 验证密钥

Obsidian

Obsidian 集成通过文件系统监视实现——无需 Webhook。Claude 会监视你的库,查找包含 "Dear Claude" 的文件,并通过追加内容到同一文件来回复。

  1. 设置环境变量,指定库的绝对路径:
    OBSIDIAN_VAULT_PATH=/Users/yourname/Documents/MyVault
    
  2. 就是这样!在任意 .md 文件中写下 "Dear Claude, ..." 并保存。

Claude 的回复会以提示块的形式追加到同一篇笔记中。Frontmatter 中会添加 claude-status 字段(processing → done / error)。

工作原理:

  • 监视库中 .md 文件的更改
  • 忽略 .obsidian/、.trash/ 和点文件目录中的文件
  • 采用 2 秒防抖,避免每次按键都触发
  • 支持 Wikilink 引用([[other-note]])——Claude 会解析并读取这些引用
  • 支持嵌入图像——Claude 可以查看和分析图像
环境变量说明
OBSIDIAN_VAULT_PATHObsidian 库的绝对路径
OBSIDIAN_WATCH_DEBOUNCE_MS防抖延迟,单位为毫秒(默认值:2000)

使用方法

触发格式

在以下任意位置写下 "Dear Claude"(不区分大小写,中间有空格):

  • GitHub issue/PR 评论
  • Linear issue 描述或评论
  • Jira issue 描述或评论
  • GitLab issue/MR 描述或评论
  • Notion 页面评论
  • Obsidian .md 文件
示例

GitHub PR 评论:

Dear Claude, please review this code for bugs and security issues.

Claude 在 GitHub 上的回复:

Claude 实例已启动(实例:abc12345) 正在处理你的请求……

任务已完成 发现 2 个问题:

  1. user.ts:45 存在 SQL 注入风险
  2. api.ts:102 缺少输入验证

已创建包含修复的 PR #15。

实例编排

Claude 实例可以生成其他实例来并行处理任务:

Dear Claude, code tasks 1-5 in parallel. Each task should be a separate branch.

Claude 将:

  1. 解析任务
  2. 通过 /api/spawn 端点生成 5 个子实例
  3. 每个子实例在自己的 git worktree 中工作(同一仓库,不同分支)
  4. 每个子实例完成后都会创建 PR
  5. 父实例轮询子实例状态

所有环境变量

# Server
DEAR_CLAUDE_PORT=3334
TAILSCALE_HOSTNAME=              # Optional: auto-detected

# GitHub
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_WEBHOOK_SECRET=
GITHUB_ACCESS_TOKEN=

# Linear
LINEAR_CLIENT_ID=
LINEAR_CLIENT_SECRET=
LINEAR_WEBHOOK_SECRET=
LINEAR_ACCESS_TOKEN=

# Jira Cloud
JIRA_DOMAIN=mycompany
[email protected]
JIRA_API_TOKEN=
JIRA_WEBHOOK_SECRET=

# GitLab
GITLAB_ACCESS_TOKEN=
GITLAB_WEBHOOK_SECRET=
GITLAB_URL=                      # Default: https://gitlab.com

# Notion
NOTION_CLIENT_ID=
NOTION_CLIENT_SECRET=
NOTION_WEBHOOK_SECRET=
NOTION_ACCESS_TOKEN=

# Obsidian
OBSIDIAN_VAULT_PATH=
OBSIDIAN_WATCH_DEBOUNCE_MS=2000

# Optional
GIPHY_API_KEY=                   # For fun GIF reactions in responses

CLI 命令

# Start the server (standalone mode)
bun run src/index.ts start

# Start as MCP server (stdio, for Claude Code)
bun run src/index.ts start --mcp

# Check server and platform status
bun run src/index.ts status

# List instances
bun run src/index.ts instances

# Setup instructions for a platform
bun run src/index.ts setup <platform>

MCP 工具

在 Claude Code 中作为 MCP 服务运行时,可以使用以下工具:

工具描述
list_platforms列出已配置的平台及其状态
list_instances列出所有 Claude 实例(可按状态筛选)
get_instance_status获取指定实例的详细状态
get_instance_messages获取实例的对话历史
kill_instance终止正在运行的实例
get_running_instances列出当前正在运行的实例 ID
spawn_instance为任务生成新的 Claude 实例
get_project_instances列出项目组中的所有实例

HTTP API

服务器还会在 localhost:3334 上公开 REST 端点:

端点方法描述
/healthGET健康检查 + 平台状态
/webhook/:platformPOSTWebhook 接收端
/api/instancesGET列出实例(?project_id= 筛选器)
/api/instances/:idGET获取实例详情 + 子实例
/api/instances/:id/killPOST终止正在运行的实例
/api/spawnPOST以编程方式生成新实例
/api/platformsGET列出已配置的平台
/setup/:platformGET启动 OAuth 流程
/oauth/callback/:platformGETOAuth 回调
POST /api/spawn
{
  "prompt": "Implement the login page",
  "repo_url": "https://github.com/owner/repo",
  "branch": "feature/login",
  "base_branch": "main",
  "parent_instance_id": "optional-parent-id",
  "project_id": "optional-project-id"
}

架构

                  Webhooks / File Watcher
  ┌────────┐ ┌────────┐ ┌──────┐ ┌────────┐ ┌──────────┐ ┌────────┐
  │ GitHub │ │ Linear │ │ Jira │ │ GitLab │ │ Obsidian │ │ Notion │
  └───┬────┘ └───┬────┘ └──┬───┘ └───┬────┘ └────┬─────┘ └───┬────┘
      │          │         │         │            │            │
      └──────────┴────┬────┴─────────┴────────────┴────────────┘
                      │
                      ▼
           ┌─────────────────────┐
           │  Tailscale Funnel   │
           │ (Public HTTPS URL)  │
           └─────────┬───────────┘
                     │
                     ▼
           ┌─────────────────────┐
           │   dear-claude       │
           │   MCP Server        │
           │                     │
           │ • Trigger detection │
           │ • Instance manager  │
           │ • Platform adapters │
           │ • Spawn API         │
           │ • SQLite DB         │
           └─────────┬───────────┘
                     │
                     ▼
           ┌─────────────────────┐
           │  Claude Code        │
           │  Instances          │
           │ (Agent SDK)         │
           │                     │
           │ • Git worktrees     │
           │ • Cross-platform    │
           │   API access        │
           │ • Child spawning    │
           └─────────────────────┘

实例生命周期

PENDING → RUNNING → IDLE → (follow-up) → RUNNING → IDLE → ... → EXPIRED (7 days)
                  ↘ COMPLETED
                  ↘ FAILED
  • PENDING:检测到触发事件,实例已排队
  • RUNNING:Claude Code 正在处理
  • IDLE:等待后续的 “Dear Claude” 提及
  • COMPLETED:任务成功完成
  • FAILED:发生错误
  • EXPIRED:超过 7 天 TTL,实例已清理

开发

# Install dependencies
bun install

# Run dev mode
bun run dev

# Type check
bunx tsc --noEmit

# Build
bun run build

# Run tests
bun test

故障排除

Tailscale
  • “Tailscale 未运行”:打开 Tailscale 应用(macOS),或运行 sudo systemctl start tailscaled && tailscale up(Linux)
  • “Funnel 未启用”:访问 https://login.tailscale.com/admin/acls 并添加 Funnel 功能
  • Funnel 消失:其他 tailscale serve/tailscale funnel 命令可能覆盖了它。健康检查会在 10 秒内自动修复。使用 tailscale serve status --json 验证。
Webhook
  • 未触发:检查 bun run src/index.ts status,确认服务器已启动。使用 curl https://<your-hostname>.ts.net/dc/health 测试。
  • “签名无效”:确认平台配置和环境变量中的 Webhook 密钥一致。
  • GitHub:此应用订阅 issue_comment 事件。若要通过新 PR 触发,请发布评论;仅 PR 描述不会触发。
OAuth
  • 令牌已过期:重新访问 https://<your-hostname>.ts.net/dc/setup/<platform> 进行身份验证。
  • 401 错误:存储的 OAuth 令牌可能已被撤销。删除 data/dear-claude.db 中失效的令牌,然后重新进行身份验证。
实例
  • 卡在 PENDING 状态:检查 Claude Code CLI(claude)是否已安装,并可通过 PATH 访问。
  • 工作目录问题:实例会在 data/workspaces/ 下创建工作区。请确保有写入权限。

能力证明

此仓库随附一份 smithmark 能力清单 smithmark.yaml,以及一份静态工具列表 tools.json。该清单在一处声明了此 MCP 服务运行时涉及的全部外部范围:

  • 网络出站:它访问的所有主机(api.github.com、github.com、api.linear.app、linear.app、gitlab.com、*.atlassian.net、api.notion.com、api.giphy.com、api.anthropic.com)及其用途。
  • 文件系统:它读取或写入的路径(~/.dear-claude/**、data/**、~/.claude.json、调试日志)及访问级别。
  • 执行:它启动的子进程(claude、tailscale、which、open、sudo、pkill)。
  • 环境变量和机密:它使用的所有凭据类环境变量,并按类型标记(访问令牌、客户端机密、webhook 机密、API 密钥、私钥)。

每次发布 GitHub 版本时,.github/workflows/smithmark-attest.yml 都会对已发布的 npm tarball 生成 无密钥 Sigstore 证明:GitHub 的 OIDC 令牌会交换为短期 Fulcio 签名证书,证明使用该证书签名,签名随后记录在公开的 Rekor 透明日志中。整个过程不涉及签名密钥或机密。生成的 smithmark-attestation.sigstore.json 会附加到 GitHub 版本发布中。

验证已发布的版本:

smithmark verify [email protected] \
  --certificate-identity "https://github.com/sns45/dear-claude/.github/workflows/smithmark-attest.yml@refs/tags/v1.1.0" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com"

(将 v1.1.0 替换为实际的版本标签)

此清单是本服务能力范围的 权威 记录。smithmark 的 lint 有意不感知主机,仅提供参考:它会将每个 fetch() 调用点和每次执行都标记为“未声明”,不论清单中包含什么,因此即使上述出站访问已完整声明,它也会在此代码库(以及任何真实的 MCP 服务)中报告问题。在 --strict 或感知主机的后继版本发布之前,请将 lint 输出视为发现问题的辅助工具,而非偏差信号。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。