MCP服务器

一个用于与PK-Central交互的MCP服务器,支持stdio和HTTP传输模式,适用于AI助手和MCP兼容客户端。

  • by KinPeter
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 KinPeter/pk-central-mcp

使用说明

pk中央mcp

一个MCP(模型上下文协议)服务器,它公开了与以下对象交互的工具 PK中央 -个人API,用于管理文档、笔记、航班、访问等。

设计用于GitHub Copilot、Claude Desktop或任何其他MCP兼容客户端等AI助手。支持两者 标准 和 HTTP(流式HTTP) 运输。

依赖项

设置

npm install
npm run build

npm脚本

脚本 描述
npm run build 将TypeScript编译为 dist/
npm run dev 监视模式——文件更改时重新编译
npm run start 运行已编译的服务器(stdio)
npm run dev:http 在HTTP模式下运行服务器,从加载变量 .env
npm run lint 运行ESLint
npm run lint:fix 运行ESLint并自动修复
npm run format 使用Prettier格式化源文件
npm run deploy Bump补丁版本,构建TS,构建并推送Docker镜像

运输方式

服务器支持由控制的两种传输模式 MCP_TRANSPORT 环境变量。

stdio(默认)

标准输入/输出传输。MCP客户端启动服务器进程,并通过stdin/stdout进行通信。 API_BASE_URL 和 API_KEY 由客户端注入。

HTTP(流式HTTP)

服务器作为独立的HTTP服务器运行。需要通过承载令牌进行身份验证。启动前必须设置所有环境变量(例如通过 .env).

npm run dev:http   # loads .env, sets MCP_TRANSPORT=http, starts server

环境变量

变量 默认值 描述
API_BASE_URL http://localhost:5500/central/v2 PK-中央API的基本URL(stdio模式)
API_KEY - PK-中央API的API密钥(stdio模式)
MCP_TRANSPORT stdio 运输方式: stdio 或 http
MCP_PORT 4999 要侦听的端口(HTTP模式)
MCP_HOST 0.0.0.0 要绑定的主机名(HTTP模式)
MCP_AUTH_TOKEN -- HTTP身份验证的承载令牌-- 必需的 在HTTP模式下

在HTTP模式下 MCP_AUTH_TOKEN 必须设置,否则服务器将拒绝所有请求 500.

MCP客户端配置

stdio——同一系统

{
  "servers": {
    "pk-central": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/central-mcp/dist/index.js"],
      "env": {
        "API_BASE_URL": "https://your-api-host/central/v2",
        "API_KEY": "<api key here>"
      }
    }
  }
}

stdio——Windows MCP客户端→ WSL Node.js

如果MCP客户端安装在Windows上,但Node.js和服务器位于WSL内,则必须通过Linux注入env变量 env 命令,Node.js二进制文件必须通过其绝对路径引用(例如,如果通过nvm安装):

{
  "servers": {
    "pk-central": {
      "type": "stdio",
      "command": "wsl",
      "args": [
        "env",
        "API_BASE_URL=http://localhost:5500/central/v2",
        "API_KEY=<api key here>",
        "/home/peter/.nvm/versions/node/v22.5.1/bin/node",
        "/home/peter/code/central-mcp/dist/index.js"
      ]
    }
  }
}

HTTP(流式HTTP)

服务器支持两种传递身份验证令牌的方式:

承载头 (首选):

{
  "servers": {
    "pk-central": {
      "type": "streamable-http",
      "url": "https://your-domain.com/central-mcp/mcp",
      "headers": {
        "Authorization": "Bearer <mcp-auth-token>"
      }
    }
  }
}

查询参数 (适用于不支持自定义标头的客户端):

{
  "servers": {
    "pk-central": {
      "type": "streamable-http",
      "url": "https://your-domain.com/central-mcp/mcp?api_key=<mcp-auth-token>"
    }
  }
}

注: 使用查询参数时,考虑禁用nginx访问日志记录 /central-mcp/ 位置,以避免令牌出现在日志文件中。

注: 在任何代码更改后,运行 npm run build 并在客户端中重新启动MCP服务器。

码头工人

生产图片

生产 Dockerfile 构建一个自包含的Node.js映像,以HTTP模式运行MCP服务器。它发布到Docker Hub作为 kinp/pk-central-mcp.

npm run deploy   # bumps patch version in package.json, builds TS, builds & pushes Docker image

生产 docker-compose.yml 引用已发布的图像并从中加载所有变量 .env 服务器上的文件:

变量 描述
API_BASE_URL PK-中央API的基本URL
API_KEY PK-中央API的API密钥
MCP_AUTH_TOKEN HTTP身份验证的承载令牌

nginx反向代理

当在nginx后面托管时 /mcp 端点需要SSE友好配置:

location /central-mcp/ {
    proxy_pass http://localhost:4999/;
    proxy_http_version 1.1;

    proxy_buffering off;
    proxy_cache off;
    proxy_set_header Connection '';

    proxy_read_timeout 24h;
    proxy_send_timeout 24h;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}