API工具执行服务器

一个轻量级且可扩展的服务器,用于通过MCP协议定义和执行API工具,支持动态HTTP请求、类型化参数和多种传输方式(stdio、sse)。

  • by AdamShannag
  • Go
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 adamshannag/api-mcp-server

使用说明

API MCP服务器

一个轻量级和可扩展的服务器,用于定义和执行API工具,使用 这 MCP协议. 支持动态HTTP请求、类型化参数和多种传输(stdio, sse).

安装

您可以通过以下两种方式之一安装服务器:

1.通过安装 go install

如果您已安装Go,请运行:

go install github.com/AdamShannag/api-mcp-server/cmd/api-mcp-server@v0.2.0

2.下载预构建的二进制文件

从下载二进制文件 发布页面.

CLI标志

标志 描述 默认值
--transport, -t 运输类型: stdio 或 sse stdio
--config, -c JSON工具配置路径 ./config.json
--version, -v API MCP服务器版本 -
--metrics, -m 启用Prometheus指标和健康检查服务器 -
--metrics-port 度量和健康检查服务器端口 8080

环境变量

变量 描述 默认值
API_MCP_HOST 要绑定的SSE主机 127.0.0.1
API_MCP_PORT 要绑定的SSE端口 13080
API_MCP_SSE_API_KEY 用于身份验证的可选承载令牌 (无)
LOG_LEVEL 设置最低日志记录级别(DEBUG, INFO, WARN, ERROR) INFO

工具配置占位符

工具配置文件支持使用以下语法替换环境变量:

{{env VAR_NAME:default_value}}

在运行时,占位符被相应的环境变量替换。如果未设置变量 default_value 而是使用。

例子

"host": "{{env API_HOST:jsonplaceholder.typicode.com}}"

使用以下值 API_HOST 如果已设置,否则将恢复为默认值。

"Authorization": "Bearer {{env API_KEY:not-set}}"

用途 API_KEY 或 "not-set" 如果没有定义。

在运行服务器之前,设置任何所需的环境变量:

export API_HOST=myapi.example.com
export API_KEY=supersecret123

认证

使用SSE传输时,您可以通过设置 API_MCP_SSE_API_KEY 环境变量。

例子:

export API_MCP_SSE_API_KEY="your-secret-key"
api-mcp-server --transport sse --config ./demo.tools.json

然后,传入的SSE连接必须在 Authorization 头球

工具配置(JSON)

服务器接受定义一个或多个工具的JSON配置文件。每个工具都包含元数据(name, description)、HTTP请求信息和列表 args 定义LLM所需的输入值。

每个工具配置包括:

  • 独特 name
  • A. description 展示给LLM
  • A. request 描述HTTP调用的对象
  • 列表 args 定义预期输入

工具参数(args)

参数是从LLM收集的输入。每个都可以用于请求的一个或多个部分:

  • 路径参数 → 直接在内部更换 endpoint
  • 查询参数 → 自动添加到URL
  • 身体 → 作为原始请求正文字符串插入

主持人(host)

这 host 是目标API域(例如。, gitlab.com).

"host": "{{env GITLAB_API_HOST:gitlab.com}}"

方法(method)

HTTP方法(GET, POST, PUT等等)。

"method": "POST"

路径参数(pathParams)

用于替换 endpoint例如:

"endpoint": "/api/v4/projects/:project_id/pipeline",
"pathParams": ["project_id"]

随着 project_id = "MyProject/test",最终端点变为:

/api/v4/projects/MyProject%2Ftest/pipeline

查询参数(queryParams)

此处列出的键会自动作为查询字符串参数附加到端点:

"endpoint": "/api/v4/projects/:project_id/pipeline",
"queryParams": ["ref"]

随着 ref = "main",结果为:

/api/v4/projects/MyProject%2Ftest/pipeline?ref=main

请求正文(body)

这 body 字段映射到单个参数名称。它的值将用作原始请求正文字符串。

例子:

"body": "issue_payload"

鉴于这一论点:

{
  "name": "issue_payload",
  "type": "string",
  "required": true,
  "description": "A JSON object like {\"title\": \"Bug report\"}"
}

发送到服务器的正文将是的确切字符串值 issue_payload.

标题(headers)

定义要包含在请求中的静态或动态HTTP标头,例如令牌或内容类型:

"headers": {
"PRIVATE-TOKEN": "{{env GITLAB_TOKEN:not-set}}",
"Content-Type": "application/json"
}

安全(secure)

如果 secure: true,请求使用 https如果省略或 false,它使用 http.

完整示例

{
  "name": "TriggerPipeline",
  "description": "Triggers a pipeline in GitLab for a specific project and branch.",
  "request": {
    "host": "{{env GITLAB_API_HOST:gitlab.com}}",
    "method": "POST",
    "secure": true,
    "endpoint": "/api/v4/projects/:project_id/pipeline",
    "headers": {
      "PRIVATE-TOKEN": "{{env GITLAB_TOKEN:not-set}}"
    },
    "queryParams": [
      "ref"
    ],
    "pathParams": [
      "project_id"
    ]
  },
  "args": [
    {
      "name": "project_id",
      "type": "string",
      "required": true,
      "description": "..."
    },
    {
      "name": "ref",
      "type": "string",
      "required": true,
      "description": "..."
    }
  ]
}

如果 project_id = "MyProject/test" 和 ref = "main",最后一个HTTP请求是:

POST https://gitlab.com/api/v4/projects/MyProject%2Ftest/pipeline?ref=main
Headers:
  PRIVATE-TOKEN: <value from GITLAB_TOKEN>

例子

此存储库包括几个示例工具配置,以演示不同的用例。这些不是 即用型API,但可作为参考:

许可证

麻省理工学院

贡献

如果你有任何问题或想做出贡献,请随时提出问题或公关。