CRM MCP服务器

一个基于TypeScript的Model Context Protocol (MCP)服务器,部署在Cloudflare Workers上,用于通过22种专用工具与Method CRM的REST API交互。

  • by avisangle
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 avisangle/method-crm-mcp-workers

使用说明

Cloudflare员工的CRM MCP服务器方法

用于方法CRM的基于类型脚本的模型上下文协议(MCP)服务器,部署在具有API密钥身份验证的Cloudflare Workers上。

概述

该MCP服务器使Claude Desktop和其他MCP客户端能够通过22个专用工具与Method CRM的REST API进行交互。专为Cloudflare员工打造 agents SDK(createMcpHandler),它提供了低延迟和自动扩展的全球边缘部署。

生活: https://method.avinashsangle.com

特征

  • 22个MCP工具 分为6类:

    • 表:查询、获取、创建、更新、删除记录
    • 发现:发现表模式,查找引用ID
    • 文件:上传、列表、下载、管理文件附件
    • 用户:获取经过身份验证的用户信息
    • 事件:创建和管理事件自动化例程
    • API密钥:管理API密钥访问和权限
  • API密钥验证:

    • 通过请求头传递方法CRM API密钥
    • 支持 X-Method-API-Key: <key> 或 Authorization: APIKey <key>
  • 边缘部署:

    • Cloudflare员工+ agents SDK(createMcpHandler)
    • Wrangler 4.x(代理SDK所需)
    • 启动时间约80ms,自动缩放,高可用性
  • 架构缓存:

    • 表模式的Workers KV缓存(延迟减少70-90%)
    • 分层TTL:高流量表10分钟,其他表5分钟
    • 分开 SCHEMAS 具有多租户隔离的KV命名空间
  • 生产就绪:

    • 使用TypeScript和Zod模式进行类型安全
    • 具有指数回退的速率限制和重试逻辑
    • 全面的错误处理
  • 多租户支持:

    • 每个客户端通过头提供自己的方法CRM API密钥
    • 无状态架构——服务器端不存储凭据
    • 支持每个租户自定义方法CRM基本URL
  • 破坏性行动的保障措施:

    • 所有CREATE、UPDATE、DELETE工具都需要 _skip_confirmation: true
    • 现场验证阻止系统现场修改
  • AI代理可发现性:

    • 丰富的JSON登录页面位于 /
    • 完整的工具目录,请访问 /capabilities 和 /.well-known/mcp.json
    • AI友好 /robots.txt

运作原理

客户端通过每个请求的请求头提供自己的方法CRM API密钥。服务器是无状态的——服务器端不存储凭据。

必填标题 (其中之一):

  • X-Method-API-Key: <your_api_key>
  • Authorization: APIKey <your_api_key>

可选标题:

  • X-Method-URL: https://rest.method.me (覆盖自定义方法CRM部署)

先决条件

  • Node.js 18+和npm
  • Cloudflare帐户(免费版有效)
  • 使用API访问的方法CRM帐户
  • 您的方法CRM API密钥

安装

# Clone the repository
git clone https://github.com/avisangle/method-crm-mcp-workers
cd method-crm-mcp-workers

# Install dependencies
npm install

配置

牧马人.汤姆

需要两个Workers KV命名空间:

name = "method-crm-mcp-workers"
main = "src/index.ts"
compatibility_date = "2024-09-23"
compatibility_flags = ["nodejs_compat"]

[[kv_namespaces]]
binding = "TOKENS"
id = "your_tokens_kv_id"

[[kv_namespaces]]
binding = "SCHEMAS"
id = "your_schemas_kv_id"

[vars]
API_BASE_URL = "https://rest.method.me/api/v1"
DEPLOYMENT_MODE = "multi-tenant"

发展

# Run local development server
npm run dev
# Available at http://localhost:8787

# Type check
npm run type-check

# Run tests
npm test

部署

# Create Workers KV namespaces
npx wrangler kv:namespace create TOKENS
npx wrangler kv:namespace create SCHEMAS

# Update wrangler.toml with the generated namespace IDs

# Deploy to Cloudflare Workers (requires Wrangler 4.x)
npm run deploy

备注:牧马人4.x是必需的。这 agents SDK(createMcpHandler)与Wrangler 3.x不兼容。

客户端配置

克劳德代码(CLI)

原生HTTP支持——无需代理。运行一次以全局注册:

claude mcp add --transport http method-crm https://method.avinashsangle.com/mcp \
  --header "X-Method-API-Key:your_api_key_here"

或添加到 .mcp.json 在项目根目录中:

{
  "mcpServers": {
    "method-crm": {
      "type": "http",
      "url": "https://method.avinashsangle.com/mcp",
      "headers": {
        "X-Method-API-Key": "your_api_key_here"
      }
    }
  }
}

克劳德桌面

需要 mcp遥控器 作为代理。添加 claude_desktop_config.json:

{
  "mcpServers": {
    "method-crm": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://method.avinashsangle.com/mcp",
        "--header",
        "X-Method-API-Key:your_api_key_here"
      ]
    }
  }
}

配置文件位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json

Claude.ai(网络版)

原生HTTP支持——无需代理。加载项设置→ 集成:

{
  "mcpServers": {
    "method-crm": {
      "url": "https://method.avinashsangle.com/mcp",
      "headers": {
        "X-Method-API-Key": "your_api_key_here"
      }
    }
  }
}

光标

添加 ~/.cursor/mcp.json (全球)或 .cursor/mcp.json (项目):

{
  "mcpServers": {
    "method-crm": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://method.avinashsangle.com/mcp",
        "--header",
        "X-Method-API-Key:your_api_key_here"
      ]
    }
  }
}

帆板运动

添加 ~/.codeium/windsurf/model_config.json:

{
  "mcpServers": {
    "method-crm": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://method.avinashsangle.com/mcp",
        "--header",
        "X-Method-API-Key:your_api_key_here"
      ]
    }
  }
}

可用工具

表格(7个工具)

  • method_tables_query -使用OData筛选器查询表
  • method_tables_get -按ID获取单个记录
  • method_tables_create -创建新记录⚠️ 需要 _skip_confirmation: true
  • method_tables_update -更新现有记录⚠️ 需要 _skip_confirmation: true
  • method_tables_delete -删除记录⚠️ 需要 _skip_confirmation: true
  • method_tables_fields -发现表架构和可用字段
  • method_tables_lookup -查找参考字段的RecordID值

文件(6个工具)

  • method_files_upload -上传文件附件⚠️ 需要 _skip_confirmation: true
  • method_files_list -列出具有筛选功能的文件
  • method_files_download -下载文件内容
  • method_files_get_url -生成临时下载URL
  • method_files_update_link -在记录之间移动文件⚠️ 需要 _skip_confirmation: true
  • method_files_delete -删除文件⚠️ 需要 _skip_confirmation: true

用户(1个工具)

  • method_user_get_info -获取当前用户信息

活动(4个工具)

  • method_events_create_routine -创建自动化例程⚠️ 需要 _skip_confirmation: true
  • method_events_list_routines -列出所有例程
  • method_events_get_routine -获取日常详细信息
  • method_events_delete_routine -删除例程⚠️ 需要 _skip_confirmation: true

API密钥(4个工具)

  • method_apikeys_create -创建新的API密钥⚠️ 需要 _skip_confirmation: true
  • method_apikeys_list -列出API密钥
  • method_apikeys_update -更新API密钥⚠️ 需要 _skip_confirmation: true
  • method_apikeys_delete -吊销API密钥⚠️ 需要 _skip_confirmation: true

⚠️ 所有破坏性操作都需要 "_skip_confirmation": true 在工具参数中防止意外数据丢失。

建筑

src/
├── index.ts           # Main entry point, HTTP handlers, discoverability endpoints
├── config.ts          # Environment validation and constants
├── auth/              # Authentication strategies
│   ├── manager.ts     # Auth strategy pattern
│   ├── apiKey.ts      # API Key authentication
│   └── context.ts     # User context and header extraction
├── cache/             # Schema caching
│   ├── types.ts       # Cache type definitions
│   └── schemaCache.ts # Workers KV schema cache manager
├── client/            # HTTP client
│   ├── methodClient.ts # API client with retry/backoff
│   └── errors.ts      # Error formatting
├── models/            # Data models
│   ├── schemas.ts     # Zod schemas for all tool inputs
│   └── types.ts       # TypeScript interfaces
├── utils/             # Utilities
│   ├── formatting.ts  # JSON/Markdown response formatters
│   ├── query.ts       # OData query builder
│   └── validation.ts  # Field/permission validators
└── tools/
    └── index.ts       # Unified tool router (all 22 tools)

可发现性端点

端点 描述
GET / 丰富的JSON登录页面,具有功能和快速入门
GET /health 健康检查({"status":"ok","version":"1.0.0"})
GET /capabilities 包含22种工具的完整工具目录
GET /.well-known/mcp.json 标准MCP发现(镜像 /capabilities)
GET /robots.txt AI友好服务器描述
POST /mcp MCP协议端点

相关项目

  • Python 版本: crm-mcp方法 -适用于铁路、Fly.io和传统部署

安全

  • 仅通过HTTPS传输API密钥
  • 服务器端未存储凭据(无状态多租户)
  • 日志或错误消息中没有秘密
  • 破坏性操作需要明确 _skip_confirmation: true 旗帜
  • 工厂模式(新鲜 McpServer 每个请求)防止跨客户端数据泄漏

故障排除

身份验证失败

  • 验证您的方法CRM API密钥有效且处于活动状态
  • 确保标题格式正确: X-Method-API-Key: <key>
  • 检查密钥是否具有您正在执行的操作所需的权限

API调用失败

  • 验证API键是否有权访问正在查询的表/资源
  • 在检查方法CRM API状态https://developer.method.me
  • 查看Cloudflare仪表板日志中的错误消息

破坏性操作被阻止

  • 添加 "_skip_confirmation": true 关于工具的论点
  • 例子: { "table": "Customer", "record_id": "123", "_skip_confirmation": true }

构建错误:“cloudflare内部:电子邮件”

  • 升级到牧马人4.x: npm install --save-dev wrangler@4
  • 使用时会出现此错误 agents 使用Wrangler 3.x的SDK

速率限制

  • 方法CRM对API调用有速率限制
  • 服务器以指数回退(2s、4s、8s)自动重试

贡献

欢迎投稿!请打开问题或拉取请求。

许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。

支持

  • 问题: GitHub问题
  • 方法CRM API文档: https://developer.method.me
  • MCP文件: https://modelcontextprotocol.io
  • 服务器功能: https://method.avinashsangle.com/capabilities