cloudradial-mcp
Exposes the CloudRadial REST API (client portal / PSA-adjacent MSP platform) as MCP tools, enabling operations on companies, articles, feedback, archives, flexible assets, and more via 34 tools with HTTP Basic Auth.
README
cloudradial-mcp
CloudRadial MCP server — exposes the CloudRadial REST API (client portal / PSA-adjacent MSP platform) as MCP tools.
Naming note: app.mspbots.ai calls this integration "CloudRadial" (
sys_integration.subject_code = CLOUDRADIAL). The vendor's public API is documented at developers.cloudradial.com and its Swagger UI athttps://api.us.cloudradial.com/swagger.
Overview
This server implements the Model Context Protocol (Streamable HTTP/SSE transport) and wraps every operation in CloudRadial's official OpenAPI 3.0 spec (v1, 34 operations across 8 resource groups: Company, Article, Feedback, Token, Archive/ArchiveItem, FlexibleAsset, FlexibleAssetType, and the OData v2 metadata endpoint). It follows the MSPbots Vendor MCP Service SOP: stateless, no stored credentials, per-request header authentication.
The underlying API authenticates via HTTP Basic Auth: the Public Key is the username and the Private Key is the password (both generated under Partner > Settings > Integrations > API in the CloudRadial portal). This matches how the existing CloudRadial integration on app.mspbots.ai is configured (authType: 0, custom Key/Secret credential fields) — this server receives both values per request via headers and never persists them.
Quick Start
Docker (recommended)
docker compose up --build
The server starts on http://localhost:8080.
Local (uv)
uv sync
python -m cloudradial_mcp
Health Check
curl http://localhost:8080/health
# {"status": "ok", "service": "cloudradial-mcp", "transport": "http"}
No credentials are required for the health endpoint.
授权参数说明 (Authentication)
Every request to /mcp must include the following HTTP headers:
| Header | 类型 | 是否必填 | 默认值 | 枚举值 | 字段描述 | Example |
|---|---|---|---|---|---|---|
X-CloudRadial-Public-Key |
string | 必填 | 无 | 无(自由文本) | HTTP Basic Auth 的用户名部分,对应 CloudRadial 门户 Partner > Settings > Integrations > API 页面生成的 Public Key。 | X-CloudRadial-Public-Key: 11111111-1111-1111-1111-111111111111 |
X-CloudRadial-Private-Key |
string | 必填 | 无 | 无(自由文本) | HTTP Basic Auth 的密码部分,对应同一页面生成的 Private Key;该值只在创建时显示一次,需妥善保存。 | X-CloudRadial-Private-Key: 22222222-2222-2222-2222-222222222222 |
Missing either header returns 401 Unauthorized.
Environment Variables
| Variable | Default | Description |
|---|---|---|
MCP_HTTP_PORT |
8080 |
Listening port |
MCP_HTTP_HOST |
0.0.0.0 |
Listening host |
CLOUDRADIAL_BASE_URL |
https://api.us.cloudradial.com |
CloudRadial API base URL |
MCP Endpoint
POST http://localhost:8080/mcp
Connect your MCP client with:
- Transport:
http(Streamable HTTP / SSE) - Headers:
X-CloudRadial-Public-Key: <public_key>(required),X-CloudRadial-Private-Key: <private_key>(required)
Tool List
34 tools — full coverage of every operation in the official CloudRadial OpenAPI spec.
Company (1)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_companies |
列出门户中的公司(客户组织) | skip?, take?, order?, direction?, filter_field?, condition?, value? |
Article (3)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_articles |
列出知识库文章 | skip?, take?, order?, direction?, filter_field?, condition?, value? |
cloudradial_create_article |
新建/更新知识库文章(写操作) | subject, body, category, company_id, groups, 其余可选字段, id?(传入则为更新) |
cloudradial_delete_article |
删除知识库文章(写操作) | company_id, id |
Feedback (3)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_feedback |
列出 CSAT/反馈记录 | skip?, take?, order?, direction?, filter_field?, condition?, value? |
cloudradial_create_feedback |
提交反馈/CSAT 记录(写操作) | feedback(dict,字段见工具 docstring) |
cloudradial_delete_feedback |
删除反馈记录(写操作) | id |
Token (3) — portal 合并字段变量,与鉴权无关
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_tokens |
列出门户合并字段 token(@变量) | company_id? |
cloudradial_set_token |
新建/更新合并字段 token(写操作) | company_id?, token?, value?, type? |
cloudradial_delete_token |
删除合并字段 token(写操作) | company_id?, token?, value?, type? |
Archive & Archive Item (6)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_archives |
列出报表归档定义 | skip?, take?, order?, direction?, filter_field?, condition?, value? |
cloudradial_create_archive |
新建/更新归档定义(写操作) | archive(dict,字段见工具 docstring) |
cloudradial_delete_archive |
删除归档定义(写操作) | archive_id |
cloudradial_get_archive_items |
列出归档内的条目(报表) | archive_id, skip?, take?, order?, direction?, filter_field?, condition?, value? |
cloudradial_create_archive_item |
向归档添加条目(写操作,body 结构未公开,见 Known Gaps) | archive_id, item(dict) |
cloudradial_delete_archive_item |
删除归档中的单个条目(写操作) | archive_id, item_id |
FlexibleAsset — IT Glue 兼容层 (8)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_flexible_assets |
按资产类型列出自定义资产记录 | flexible_asset_type_id, organization_id?, name?, page_number?, page_size?, include?, sort? |
cloudradial_create_flexible_asset |
新建自定义资产记录(写操作) | flexible_asset_type_id, traits, organization_id?, archived?, type="flexible-assets" |
cloudradial_update_flexible_assets |
批量更新自定义资产记录(写操作) | assets(list,JSON:API 形状,见 docstring) |
cloudradial_delete_flexible_assets |
批量删除自定义资产记录(写操作) | ids(list), type="flexible-assets" |
cloudradial_get_flexible_asset |
按 ID 查自定义资产记录 | id, include? |
cloudradial_delete_flexible_asset |
删除单个自定义资产记录(写操作) | id |
cloudradial_update_flexible_asset |
更新单个自定义资产记录(写操作) | id, flexible_asset_type_id?, archived?, traits?, organization_id?, type="flexible-assets" |
cloudradial_create_organization_flexible_assets |
在指定公司下批量新建自定义资产(写操作) | org_id, assets(list) |
FlexibleAssetType — 自定义资产类型定义 (8)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_flexible_asset_types |
列出自定义资产类型 | id?, name?, icon?, enabled?, page_number?, page_size?, include?, sort? |
cloudradial_create_flexible_asset_type |
新建自定义资产类型(可同时创建字段,写操作) | name, description?, icon?, show_in_menu?, fields?(list) |
cloudradial_get_flexible_asset_type |
按 ID 查自定义资产类型 | id, include? |
cloudradial_update_flexible_asset_type |
更新自定义资产类型(写操作) | id, name, description?, icon?, show_in_menu?, fields?(list) |
cloudradial_delete_flexible_asset_type |
删除自定义资产类型(写操作) | id |
cloudradial_get_flexible_asset_fields |
列出资产类型下的字段定义 | type_id, id?, page_number?, page_size?, include?, sort? |
cloudradial_create_flexible_asset_field |
为资产类型新增字段定义(写操作) | type_id, name, order, kind, 其余可选字段 |
cloudradial_get_flexible_asset_field |
按 ID 查单个字段定义 | type_id, field_id |
Metadata — OData v2 (2)
| Tool | 功能 | 参数 |
|---|---|---|
cloudradial_get_odata_metadata |
获取 OData $metadata 文档 | 无 |
cloudradial_query_odata |
查询 OData v2 端点 | raw_query?(原始 OData 查询字符串,如 $filter=...&$top=10) |
测试示例 (Test Example)
List companies:
{
"method": "tools/call",
"params": { "name": "cloudradial_get_companies", "arguments": { "take": 10 } }
}
Equivalent curl against the running server (streamable HTTP MCP endpoint):
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "X-CloudRadial-Public-Key: <public_key>" \
-H "X-CloudRadial-Private-Key: <private_key>" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "cloudradial_get_companies", "arguments": { "take": 10 } }
}'
API Reference
- Getting started: https://developers.cloudradial.com/docs/getting-started
- Swagger UI: https://api.us.cloudradial.com/swagger
- Base URL:
https://api.us.cloudradial.com
Known Gaps / Not Yet Verified
- Not yet tested against a live CloudRadial account — only protocol-level verification (health check, 401 on missing credentials,
tools/listreturning all 34 tools) has been done so far. cloudradial_create_archive_item's request body shape is not published in CloudRadial's OpenAPI spec (the schema is empty) — CloudRadial's docs describe archive item uploads via drag-and-drop, an archive-unique email address, or "an API connection" (up to 128MB), but do not document the exact JSON field names. Verify the correct payload shape with CloudRadial support or by inspecting a successful portal-side upload before relying on this tool in production.- The
TokenAPI (cloudradial_get_tokens/cloudradial_set_token/cloudradial_delete_token) manages CloudRadial's portal merge-field variables (@-prefixed tokens used in Articles/Automations/Messages) — it is unrelated to authentication, despite the name. - The
FlexibleAsset/FlexibleAssetTypetools wrap a JSON:API-shaped, IT Glue-compatible layer (/compatibility/...); bulk update/create-under-organization tools accept pre-shaped JSON:API list payloads rather than fully flattened arguments, since the nesting (data[].attributes.{...}) doesn't flatten cleanly into named parameters. cloudradial_query_odataaccepts a raw OData query string rather than typed parameters, since the spec does not declare$filter/$select/etc. as typed Swagger parameters (standard for OData v4 endpoints).
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。