MCP Pangolin
A Model Context Protocol (MCP) server that exposes your Pangolin Integration API to Claude and other MCP-compatible AI assistants.
______________________________________________________________________
赞助商
France-Nuage
Sovereign French cloud paired with self-hosted tunnels. EU end-to-end.
Hook0
Self-hosted Webhooks-as-a-Service behind your Pangolin tunnels.
Natalia
Self-host your stack, let Natalia answer customer calls 24/7.
Netir
Hire vetted French freelance self-hosting infra experts.
NoBullshitConseil
Tech advisory without the bullshit. Infra & sovereignty strategy.
Qualneo
Qualiopi LMS you can self-host. 32 indicators wired in.
Recapro
Sovereign AI meeting notes hosted behind your own tunnels.
有兴趣赞助吗? 联系
概述
该项目提供了一个MCP服务器,将所有穿山甲API端点作为工具公开,使人工智能助手能够管理您的穿山甲基础设施,包括组织、站点、资源、角色、用户等。
特性
- 全面覆盖Pangolin Integration API端点
- 只读模式 通过
PANGOLIN_READ_ONLY环境变量 - 通过以下方式进行承载令牌身份验证
PANGOLIN_API_KEY - 根据OpenAPI/Swagger规范自动生成工具
- 支持路径参数、查询参数和请求体
______________________________________________________________________
快速开始
先决条件
- 防锈稳定(安装)
- 具有API访问权限的Pangolin实例
- 穿山甲API钥匙
1.建设项目
git clone https://github.com/FGRibreau/mcp-pangolin.git
cd mcp-pangolin
cargo build --release2.运行MCP服务器
./target/release/mcp-pangolin \
--openapi pangolin-api.json \
--api-key YOUR_API_KEY \
--base-url https://your-pangolin-instance.com/v1服务器将:
- 加载OpenAPI规范
- 为所有端点生成工具定义
- 开始在stdin/stdout上监听MCP消息
只读模式
要以只读模式运行服务器(只允许GET操作):
./target/release/mcp-pangolin \
--openapi pangolin-api.json \
--api-key YOUR_API_KEY \
--base-url https://your-pangolin-instance.com/v1 \
--read-only或者通过环境变量:
export PANGOLIN_READ_ONLY=true
./target/release/mcp-pangolin \
--openapi pangolin-api.json \
--api-key YOUR_API_KEY \
--base-url https://your-pangolin-instance.com/v1配置
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
PANGOLIN_API_KEY | 承载令牌身份验证的API密钥 | 是 |
PANGOLIN_BASE_URL | 穿山甲API的基本URL | 是 |
PANGOLIN_OPENAPI_FILE | OpenAPI规范文件的路径 | 是\* |
PANGOLIN_OPENAPI_JSON | 内联OpenAPI规范JSON | 是\* |
PANGOLIN_READ_ONLY | 设置为 true 启用只读模式 | 否 |
\*要么 PANGOLIN_OPENAPI_FILE 或 PANGOLIN_OPENAPI_JSON 必须提供。
克劳德代码
将以下内容添加到您的Claude Code MCP设置中:
claude mcp add pangolin \
--command /path/to/mcp-pangolin \
--args "--openapi" "/path/to/pangolin-api.json" "--base-url" "https://your-pangolin-instance.com/v1" \
--env "PANGOLIN_API_KEY=YOUR_API_KEY"对于只读模式:
claude mcp add pangolin \
--command /path/to/mcp-pangolin \
--args "--openapi" "/path/to/pangolin-api.json" "--base-url" "https://your-pangolin-instance.com/v1" "--read-only" \
--env "PANGOLIN_API_KEY=YOUR_API_KEY"或者手动将其添加到MCP设置文件中:
{
"mcpServers": {
"pangolin": {
"command": "/path/to/mcp-pangolin",
"args": [
"--openapi", "/path/to/pangolin-api.json",
"--base-url", "https://your-pangolin-instance.com/v1"
],
"env": {
"PANGOLIN_API_KEY": "YOUR_API_KEY",
"PANGOLIN_READ_ONLY": "true"
}
}
}
}克劳德桌面版
添加 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"pangolin": {
"command": "/absolute/path/to/mcp-pangolin",
"args": [
"--openapi", "/absolute/path/to/pangolin-api.json",
"--base-url", "https://your-pangolin-instance.com/v1"
],
"env": {
"PANGOLIN_API_KEY": "YOUR_API_KEY"
}
}
}
}用法示例
配置后,您可以向Claude提出以下问题:
- *“列出Pangolin的所有组织”*
- *“显示组织“我的组织”的网站”*
- *“站点123中有哪些可用资源?”*
- *“列出组织中的所有用户”*
- *“显示为此资源配置的角色”*
并且具有写访问权限(当不处于只读模式时):
- *“创建一个名为‘生产我们’的新网站”*
- *“添加用户john@example.com到管理员角色“*
- *“更新API网关的资源配置”*
可用工具
MCP服务器根据Pangolin OpenAPI规范生成工具。以下是主要类别:
组织
| 工具 | 说明 |
|---|---|
orgs | 列出所有组织 |
org_by_orgId | 按ID获取组织 |
create_org | 创建新组织 |
update_org_by_orgId | 更新组织 |
delete_org_by_orgId | 删除组织 |
站点
| 工具 | 说明 |
|---|---|
org_by_orgId_sites | 列出组织中的所有站点 |
site_by_siteId | 按ID获取网站 |
create_org_by_orgId_site | 创建新网站 |
update_site_by_siteId | 更新网站 |
delete_site_by_siteId | 删除网站 |
资源
| 工具 | 说明 |
|---|---|
org_by_orgId_resources | 列出组织的资源 |
resource_by_resourceId | 按ID获取资源 |
create_org_by_orgId_resource | 创建资源 |
update_resource_by_resourceId | 更新资源 |
delete_resource_by_resourceId | 删除资源 |
站点资源
| 工具 | 说明 |
|---|---|
org_by_orgId_site_resources | 列出组织的所有站点资源 |
site_resource_by_siteResourceId | 获取特定的网站资源 |
create_org_by_orgId_site_resource | 创建新的网站资源 |
update_site_resource_by_siteResourceId | 更新站点资源 |
delete_site_resource_by_siteResourceId | 删除站点资源 |
目标
| 工具 | 说明 |
|---|---|
resource_by_resourceId_targets | 列出资源的目标 |
target_by_targetId | 找到目标 |
create_resource_by_resourceId_target | 创建目标 |
update_target_by_targetId | 更新目标 |
delete_target_by_targetId | 删除目标 |
用户
| 工具 | 说明 |
|---|---|
org_by_orgId_users | 列出组织中的用户 |
org_by_orgId_user_by_userId | 在组织中获取用户 |
create_org_by_orgId_user | 创建组织用户 |
update_org_by_orgId_user_by_userId | 更新用户 |
delete_org_by_orgId_user_by_userId | 从组织中删除用户 |
角色
| 工具 | 说明 |
|---|---|
org_by_orgId_roles | 列出组织中的角色 |
role_by_roleId | 获得一个角色 |
create_org_by_orgId_role | 创建角色 |
delete_role_by_roleId | 删除角色 |
客户
| 工具 | 说明 |
|---|---|
org_by_orgId_clients | 列出组织的所有客户 |
client_by_clientId | 通过ID获取客户端 |
create_org_by_orgId_client | 创建新客户端 |
update_client_by_clientId | 更新客户端 |
delete_client_by_clientId | 删除客户端 |
身份提供者
| 工具 | 说明 |
|---|---|
idp | 列出所有身份提供者 |
idp_by_idpId | 按ID获取IDP |
create_idp_oidc | 创建OIDC IdP |
update_idp_by_idpId_oidc | 更新OIDC IdP |
delete_idp_by_idpId | 删除IDP |
API密钥
| 工具 | 说明 |
|---|---|
org_by_orgId_api_keys | 列出组织的所有API密钥 |
create_org_by_orgId_api_key | 创建新的API密钥 |
delete_org_by_orgId_api_key_by_apiKeyId | 删除API密钥 |
访问令牌
| 工具 | 说明 |
|---|---|
org_by_orgId_access_tokens | 列出组织中的所有访问令牌 |
resource_by_resourceId_access_tokens | 列出资源的访问令牌 |
update_resource_by_resourceId_access_token | 生成新的访问令牌 |
delete_access_token_by_accessTokenId | 删除访问令牌 |
领域
| 工具 | 说明 |
|---|---|
org_by_orgId_domains | 列出组织的所有域 |
org_by_orgId_domain_by_domainId | 按ID获取域 |
org_by_orgId_domain_by_domainId_dns_records | 获取域的DNS记录 |
蓝图
| 工具 | 说明 |
|---|---|
org_by_orgId_blueprints | 列出组织的所有蓝图 |
org_by_orgId_blueprint_by_blueprintId | 按ID获取蓝图 |
create_org_by_orgId_blueprint | 应用蓝图 |
日志
| 工具 | 说明 |
|---|---|
org_by_orgId_logs_request | 查询请求审核日志 |
org_by_orgId_logs_analytics | 查询请求审核分析 |
CLI 参考
mcp-pangolin [OPTIONS] --api-key --base-url
Options:
-o, --openapi Path to OpenAPI/Swagger JSON specification file
[env: PANGOLIN_OPENAPI_FILE]
--openapi-json Inline OpenAPI/Swagger JSON specification
[env: PANGOLIN_OPENAPI_JSON]
-k, --api-key Pangolin API key for authentication
[env: PANGOLIN_API_KEY]
-b, --base-url Base URL for the Pangolin API
[env: PANGOLIN_BASE_URL]
-r, --read-only Enable read-only mode (only GET operations)
[env: PANGOLIN_READ_ONLY]
-h, --help Print help
-V, --version Print version发展
# Build debug version
cargo build
# Run tests
cargo test
# Run with logging
RUST_LOG=debug ./target/debug/mcp-pangolin \
--openapi pangolin-api.json \
--api-key YOUR_KEY \
--base-url https://api.example.com/v1运行测试
# Run all tests
cargo test
# Run read-only mode tests specifically
cargo test --test read_only_mode
# Run tests with output
cargo test -- --nocapture故障排除
“没有可用的工具”
- 确保您的OpenAPI规范文件是有效的JSON
- 检查文件路径是否正确
- 尝试使用绝对路径
--openapi论点
“401未经授权”错误
- 验证您的API密钥是否正确
- 检查API密钥是否具有足够的权限
- 确保正确传递API密钥(通过
--api-key或PANGOLIN_API_KEY任何人)
“连接被拒绝”或超时
- 验证您的穿山甲实例是否可访问
- 检查防火墙或VPN要求
- 确保
--base-url包括正确的协议(https://)和API版本路径(/v1)
写入操作被阻止
如果您看到“只读模式下不允许写入操作”:
- 检查是否
PANGOLIN_READ_ONLY环境变量设置为true - 移除
--read-only标记是否需要写访问权限 - 验证您的API密钥是否具有对Pangolin实例的写入权限
安全考虑
- 只读模式:使用
PANGOLIN_READ_ONLY=true在生产环境中,人工智能助手应该只有读取权限 - API密钥安全:永远不要将API密钥提交到版本控制。使用环境变量或秘密管理解决方案
- 网络安全:始终使用HTTPS作为基本URL
贡献
欢迎投稿!请随时提交拉取请求。
许可证
MIT许可证-请参阅 许可证 了解详情。
