返回市场
MCP服务器

MCP服务器

作者:dodopayments32 星标更新:2025-11-17

项目介绍

技术文档摘要

Dodo Payments TypeScript MCP 服务器

它是由 Stainless 生成的。

安装

直接调用

你可以通过 npx 直接运行 MCP 服务器:

export DODO_PAYMENTS_API_KEY="My Bearer Token"
export DODO_PAYMENTS_WEBHOOK_KEY="My Webhook Key"
export DODO_PAYMENTS_ENVIRONMENT="live_mode"
npx -y dodopayments-mcp@latest

通过 MCP 客户端

modelcontextprotocol.io 上有一个现有的客户端列表。如果你已经有一个客户端,请查阅其文档以安装 MCP 服务器。

对于具有配置 JSON 的客户端,可能看起来像这样:

{
  "mcpServers": {
    "dodopayments_api": {
      "command": "npx",
      "args": ["-y", "dodopayments-mcp", "--client=claude", "--tools=dynamic"],
      "env": {
        "DODO_PAYMENTS_API_KEY": "My Bearer Token",
        "DODO_PAYMENTS_WEBHOOK_KEY": "My Webhook Key",
        "DODO_PAYMENTS_ENVIRONMENT": "live_mode"
      }
    }
  }
}

Cursor

如果你使用 Cursor,可以通过下面的按钮安装 MCP 服务器。你需要在 Cursor 的 mcp.json 中设置环境变量,该文件可以在 Cursor 设置 > 工具 & MCP > 新 MCP 服务器中找到。

添加到 Cursor

VS Code

如果你使用 MCP,可以通过点击下面的链接来安装 MCP 服务器。你需要在 VS Code 的 mcp.json 中设置环境变量,该文件可以通过命令面板 > MCP: 打开用户配置找到。

打开 VS Code

Claude Code

如果你使用 Claude Code,可以通过在终端中运行以下命令来安装 MCP 服务器。你需要在 Claude Code 的 .claude.json 中设置环境变量,该文件可以在你的主目录中找到。

claude mcp add --transport stdio dodopayments_api --env DODO_PAYMENTS_API_KEY="Your DODO_PAYMENTS_API_KEY here." DODO_PAYMENTS_WEBHOOK_KEY="Your DODO_PAYMENTS_WEBHOOK_KEY here." -- npx -y dodopayments-mcp

将端点暴露给你的 MCP 客户端

有三种方式可以将端点作为工具暴露在 MCP 服务器上:

  1. 每个端点暴露一个工具,并根据需要进行过滤
  2. 暴露一组工具,动态发现并调用 API 端点
  3. 暴露文档搜索工具和代码执行工具,允许客户端编写要针对 TypeScript 客户端执行的代码

过滤端点和工具

你可以在命令行上运行包以发现并过滤 MCP 服务器暴露的一组工具。这对于大型 API 非常有用,在这种情况下,一次性包含所有端点可能会超出 AI 的上下文窗口。

你可以按多个方面进行过滤:

  • --tool 按名称包含特定工具
  • --resource 包含特定资源下的所有工具,可以使用通配符,例如 my.resource*
  • --operation 只包括读取(获取/列出)或写入操作

动态工具

如果你指定 --tools=dynamic 到 MCP 服务器,而不是在 API 中每个端点暴露一个工具,它将暴露以下工具:

  1. list_api_endpoints - 发现可用端点,可选地通过搜索查询进行过滤
  2. get_api_endpoint_schema - 获取特定端点的详细模式信息
  3. invoke_api_endpoint - 使用适当的参数执行任何端点

这使你可以将完整的 API 端点集提供给你的 MCP 客户端,而无需一次性加载所有模式到上下文中。相反,LLM 将自动使用这些工具一起搜索、查找和动态调用端点。然而,由于模式的间接性,它可能比显式导入工具时更难以提供正确的属性。因此,你可以选择显式工具、动态工具或两者。

更多信息请参阅 --help

所有这些命令行选项都可以重复、组合,并且有相应的排除版本(例如 --no-tool)。

使用 --list 查看可用工具列表,或者查看下面的内容。

代码执行

如果你指定 --tools=code 到 MCP 服务器,它将仅暴露两个工具:

  • search_docs - 搜索 API 文档并返回 Markdown 结果列表
  • execute - 对 TypeScript 客户端运行代码

这允许 LLM 通过串联许多 API 调用来实现更复杂的逻辑,而无需将其中间结果加载到其上下文窗口中。

代码执行本身发生在具有网络访问权限仅限于 API 基础 URL 的 Deno 沙箱中。

指定 MCP 客户端

不同的客户端有不同的能力来处理任意工具和模式。

你可以使用 --client 参数指定你正在使用的客户端,MCP 服务器将自动提供与该客户端更兼容的工具和模式。

  • --client=<type>:基于已知的 MCP 客户端设置所有功能

    • 有效值:openai-agents, claude, claude-code, cursor
    • 示例:--client=cursor

此外,如果你的客户端不在上述列表中,或者随着时间推移变得更好,你可以手动启用或禁用某些功能:

  • --capability=<name>:指定单个客户端功能
    • 可用功能:
      • top-level-unions:支持工具模式中的顶级联合
      • valid-json:支持参数的 JSON 字符串解析
      • refs:支持模式中的 $ref 指针
      • unions:支持模式中的联合类型(anyOf)
      • formats:支持模式中的格式验证(如 date-time, email)
      • tool-name-length=N:将最大工具名称长度设置为 N 个字符
    • 示例:--capability=top-level-unions --capability=tool-name-length=40
    • 示例:--capability=top-level-unions,tool-name-length=40

示例

  1. 过滤卡片上的读取操作:
--resource=cards --operation=read
  1. 排除特定工具同时包含其他工具:
--resource=cards --no-tool=create_cards
  1. 配置 Cursor 客户端并自定义最大工具名称长度:
--client=cursor --capability=tool-name-length=40
  1. 复杂过滤,具有多个标准:
--resource=cards,accounts --operation=read --tag=kyc --no-tool=create_cards

远程运行

使用 --transport=http 启动客户端会将服务器作为远程服务器启动,使用流式 HTTP 传输。--port 设置可以选择运行的端口,--socket 设置允许在 Unix 套接字上运行。

授权可以通过 Authorization 标头使用 Bearer 方案提供。

此外,授权还可以通过以下标头提供:

标头等效客户端选项安全方案
x-dodo-payments-api-keybearerTokenAPI_KEY

此服务器的配置 JSON 可能如下所示,假设服务器托管在 http://localhost:3000

{
  "mcpServers": {
    "dodopayments_api": {
      "url": "http://localhost:3000",
      "headers": {
        "Authorization": "Bearer <auth value>"
      }
    }
  }
}

用于过滤工具和指定客户端的命令行参数也可以作为 URL 中的查询参数使用。 例如,为了排除特定工具同时包含其他工具,使用以下 URL:

http://localhost:3000?resource=cards&resource=accounts&no_tool=create_cards

或者,为了配置 Cursor 客户端并自定义最大工具名称长度,使用以下 URL:

http://localhost:3000?client=cursor&capability=tool-name-length%3D40

单独导入工具和服务器

// 导入服务器、生成的端点或初始化函数
import { server, endpoints, init } from "dodopayments-mcp/server";

// 导入特定工具
import createCheckoutSessions from "dodopayments-mcp/tools/checkout-sessions/create-checkout-sessions";

// 初始化服务器和所有端点
init({ server, endpoints });

// 手动启动服务器
const transport = new StdioServerTransport();
await server.connect(transport);

// 或者使用特定工具初始化自己的服务器
const myServer = new McpServer(...);

// 定义自己的端点
const myCustomEndpoint = {
  tool: {
    name: 'my_custom_tool',
    description: '我的自定义工具',
    inputSchema: zodToJsonSchema(z.object({ a_property: z.string() })),
  },
  handler: async (client: client, args: any) => {
    return { myResponse: 'Hello world!' };
  })
};

// 使用自定义端点初始化服务器
init({ server: myServer, endpoints: [createCheckoutSessions, myCustomEndpoint] });

可用工具

以下工具在此 MCP 服务器中可用。

资源 checkout_sessions

  • create_checkout_sessions (write):
  • retrieve_checkout_sessions (read):

资源 payments

  • create_payments (write):
  • retrieve_payments (read):
  • list_payments (read):
  • retrieve_line_items_payments (read):

资源 subscriptions

  • create_subscriptions (write):

  • retrieve_subscriptions (read):

  • update_subscriptions (write):

  • list_subscriptions (read):

  • change_plan_subscriptions (write):

  • charge_subscriptions (write):

  • retrieve_usage_history_subscriptions (read):获取订阅的详细使用历史记录,包括基于用量计费(计量组件)。 此端点提供了客户使用模式和随时间变化的计费计算的洞察。

    你会得到什么:

    • 计费周期:每个项目代表一个计费周期,带有开始和结束日期
    • 计量使用:订阅上配置的每个计量器的详细使用情况
    • 使用计算:总消耗单位、免费阈值单位和可收费单位
    • 历史跟踪:基于用量的费用的完整审计轨迹

    使用案例:

    • 客户服务:调查计费问题和使用差异
    • 使用分析:分析客户随时间的消费模式
    • 计费透明度:向客户提供详细的使用分解
    • 收入优化:识别使用趋势以优化定价策略

    过滤选项:

    • 日期范围过滤:获取特定时间段的使用历史
    • 计量器特定过滤:专注于特定计量器的使用
    • 分页:高效地浏览大量使用历史

    重要说明:

    • 仅返回具有基于用量(计量)组件的订阅的数据
    • 使用历史按计费周期(订阅周期)组织
    • 免费阈值单位单独计算并显示
    • 即使计量配置发生变化,也会保留历史数据

    示例查询模式:

    • 获取最近三个月:?start_date=2024-01-01T00:00:00Z&end_date=2024-03-31T23:59:59Z
    • 按计量器过滤:?meter_id=mtr_api_requests
    • 分页结果:?page_size=20&page_number=1
    • 最近使用:?start_date=2024-03-01T00:00:00Z(从 3 月 1 日到现在)
  • update_payment_method_subscriptions (write):

资源 invoices.payments

  • retrieve_invoices_payments (read):
  • retrieve_refund_invoices_payments (read):

资源 licenses

  • activate_licenses (write):
  • deactivate_licenses (write):
  • validate_licenses (write):

资源 license_keys

  • retrieve_license_keys (read):
  • update_license_keys (write):
  • list_license_keys (read):

资源 license_key_instances

  • retrieve_license_key_instances (read):
  • update_license_key_instances (write):
  • list_license_key_instances (read):

资源 customers

  • create_customers (write):
  • retrieve_customers (read):
  • update_customers (write):
  • list_customers (read):
  • retrieve_payment_methods_customers (read):

资源 customers.customer_portal

  • create_customers_customer_portal (write):

资源 customers.wallets

  • list_customers_wallets (read):

资源 customers.wallets.ledger_entries

  • create_wallets_customers_ledger_entries (write):
  • list_wallets_customers_ledger_entries (read):

资源 refunds

  • create_refunds (write):
  • retrieve_refunds (read):
  • list_refunds (read):

资源 disputes

  • retrieve_disputes (read):
  • list_disputes (read):

资源 payouts

  • list_payouts (read):

资源 products

  • create_products (write):
  • retrieve_products (read):
  • update_products (write):
  • list_products (read):
  • archive_products (write):
  • unarchive_products (write):
  • update_files_products (write):

资源 products.images

  • update_products_images (write):

资源 misc

  • list_supported_countries_misc (read):

资源 discounts

  • create_discounts (write):POST /discounts 如果省略或为空 code,则生成一个随机的 16 位大写字母代码。
  • retrieve_discounts (read):GET /discounts/{discount_id}
  • update_discounts (write):PATCH /discounts/{discount_id}
  • list_discounts (read):GET /discounts
  • delete_discounts (write):DELETE /discounts/{discount_id}

资源 addons

  • create_addons (write):
  • retrieve_addons (read):
  • update_addons (write):
  • list_addons (read):
  • update_images_addons (write):

资源 brands

  • create_brands (write):
  • retrieve_brands (read):薄处理程序只是调用 get_brand 并包装在 Json(...)
  • update_brands (write):
  • list_brands (read):
  • update_images_brands (write):

资源 webhooks

  • create_webhooks (write):创建新的 webhook
  • retrieve_webhooks (read):通过 id 获取 webhook
  • update_webhooks (write):通过 id 更新 webhook
  • list_webhooks (read):列出所有 webhook
  • delete_webhooks (write):通过 id 删除 webhook
  • retrieve_secret_webhooks (read):通过 id 获取 webhook 秘密

资源 webhooks.headers

  • retrieve_webhooks_headers (read):通过 id 获取 webhook
  • update_webhooks_headers (write):通过 id 更新 webhook

资源 usage_events

  • retrieve_usage_events (read):使用唯一的事件 ID 获取单个事件的详细信息。此端点适用于:

    • 调试特定事件摄入问题
    • 为客户支持检索事件详情
    • 验证事件是否