Skip to main content
Glama
bssth
by bssth

aspro-mcp

npm version npm downloads install size types CI License: MIT Node

一个 Model Context Protocol 服务器,将 Aspro.Cloud REST API 暴露给 LLM 客户端(Claude Desktop、Claude Code 等)。该服务器附带了打包好的 OpenAPI 规范,因此模型可以自行发现模块、实体和方法并安全地调用它们。

特性

  • 自描述。 模型通过 aspro_list_modules → aspro_list_entities → aspro_list_methods → aspro_describe 浏览 API,然后才进行 aspro_call ——无需记忆端点。

  • 子字符串搜索 涵盖模块 / 实体 / 方法 / 路径 / 描述 / 标签。

  • 默认使用 form-urlencoded POST(Aspro 预期的内容类型),支持数组和嵌套对象处理。

  • 路径参数替换,适用于 /get/{id}、/update/{id}、/delete/{id} 等。

  • 租户配置,通过 ASPRO_COMPANY(子域名)或完整的 ASPRO_BASE_URL 进行配置。

Related MCP server: Aspro Cloud MCP

安装

git clone https://github.com/bssth/aspro-mcp.git
cd aspro-mcp
npm install
npm run build

需要 Node.js ≥ 18。

配置

复制示例环境变量文件并填写:

cp .env.example .env
ASPRO_COMPANY=your_company        # the {company} part of https://{company}.aspro.cloud
ASPRO_API_KEY=your_api_key_here   # passed as ?api_key=... on every request
# ASPRO_BASE_URL=...              # optional; overrides the URL built from ASPRO_COMPANY
# ASPRO_TIMEOUT_MS=30000          # optional; default 30s

在您的 Aspro.Cloud 账户的 设置 → 集成 → API 中获取 API 密钥。

连接到客户端

Claude Desktop / Claude Code

将服务器添加到您的 MCP 配置中:

{
  "mcpServers": {
    "aspro": {
      "command": "node",
      "args": ["/absolute/path/to/aspro-mcp/dist/index.js"]
    }
  }
}

无论客户端在哪个工作目录下启动,服务器都会从项目根目录读取其 .env 文件。

其他 MCP 客户端

任何通过 stdio 使用 MCP 通信的客户端都可以运行 node dist/index.js(或 npm start)。

暴露的工具

工具

功能

aspro_list_modules

列出顶级模块(crm、fin、task 等)及其包含的实体/操作数量。

aspro_list_entities

列出模块内的实体以及每个实体上可用的方法。

aspro_list_methods

列出模块的操作(HTTP 方法 + 路径 + 简短描述),可选择按实体过滤。

aspro_search

在模块 / 实体 / 方法 / 路径 / 描述 / 标签中进行子字符串搜索。

aspro_describe

获取单个操作的完整架构:查询参数 / 路径参数、带有类型和描述的请求体字段。

aspro_call

执行调用。返回 { status, ok, url, data }。

推荐的流程是 search/list_* → describe → call。

开发

npm run dev      # tsc --watch
npm run build    # tsc
npm run smoke    # offline: exercises the spec indexer and URL builder

冒烟测试不涉及网络请求——它检查打包的 OpenAPI 规范是否可解析、操作是否可描述,以及 URL 构建器是否生成了格式正确的 URL。

项目布局

src/
  index.ts    MCP server (tool registration + entry point)
  config.ts   .env loading and validation
  client.ts   HTTP client (URL building, form-urlencoded POSTs, timeouts)
  spec.ts    OpenAPI indexer (modules / entities / methods / search / describe)
  smoke.ts    offline smoke test
spec/
  openapi.json  bundled Aspro.Cloud OpenAPI spec

安全说明

  • API 密钥从环境变量中读取,并作为 ?api_key=... 附加到每个请求中。切勿提交 .env 文件。

  • 服务器没有白名单——一旦配置,它就可以调用规范中描述的任何端点(包括像 /delete/{id} 这样的破坏性操作)。请使用具有最小必要权限的专用 API 密钥。

  • 将工具输出视为不可信:Aspro 实体(自定义字段值、描述等)可能包含用户提供的内容。

贡献

欢迎提交 Issue 和 PR。提交前请运行 npm run build && npm run smoke。

许可证

MIT — 参见 LICENSE。

aspro-mcp 是一个非官方的第三方连接器,与 Aspro.Cloud 无关联。

Available Tools

7 tools
aspro_callA
Read-only

Read data from Aspro.Cloud — the list and get methods only. Run aspro_describe first to learn the parameter shape. Pass the entity id via id, query-string args via query. Returns { status, ok, url, data }. Use aspro_write for create/update/delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPath id, when the operation path contains {id}.
bodyNoForm-urlencoded body fields for POST operations.
queryNoQuery string parameters. Do not include api_key — it is added automatically.
entityYes
methodYes
moduleYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals that only list and get methods are supported, that api_key is automatically added, and the exact return structure { status, ok, url, data }. It also indicates parameter shapes are entity-specific and require aspro_describe first, going beyond the readOnlyHint and openWorldHint annotations with concrete behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of five short, purpose-driven sentences with no redundancy. It front-loads the core purpose and each subsequent sentence adds a necessary operational detail, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description provides the return shape, which is vital. It also gives parameter-passing conventions, the prerequisite of running aspro_describe, and contrasts with aspro_write. For a generic read tool with sibling tools, this is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains how to use id and query ('Pass the entity id via `id`, query-string args via `query`') and warns not to include api_key. It directs users to aspro_describe for the full parameter shape, which compensates for the schema's 50% coverage. However, it leaves module/entity/method semantics implicit and does not mention body, though the list/get restriction makes body usage less relevant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Read data from Aspro.Cloud' and immediately specifies 'the `list` and `get` methods only,' clearly defining the tool's scope. It also distinguishes it from aspro_write by stating 'Use aspro_write for create/update/delete,' providing explicit differentiation from the write sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use (reading via list/get), when-not-to-use (use aspro_write for writes), and a prerequisite (run aspro_describe first to learn parameter shapes). It also names an alternative tool for write operations, which is clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aspro_describeA
Read-only

Return the full schema for one operation: HTTP method, path, whether it mutates data, request-body fields and the fields present in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYes
methodYesMethod segment, e.g. 'list', 'get', 'create', 'update', 'delete'.
moduleYes
include_raw_response_schemaNoInclude the untrimmed OpenAPI response schema. Verbose; off by default.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that the tool is safe and read-only. The description adds useful context about the content of the response (e.g., 'whether it mutates data' as part of the operation schema) but does not disclose additional behavioral traits such as authentication needs or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's function and the key components of the returned schema. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a describe tool with no output schema, the description adequately covers what will be returned. It includes the essential details (HTTP method, path, mutation flag, request/response fields). However, it could be more complete by mentioning how module/entity/method are specified, but the schema fills in required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for 'method' and 'include_raw_response_schema' but not for 'module' and 'entity' (50% coverage). The description clarifies the overall purpose but does not explain individual parameters in depth. It relies partly on the schema to communicate parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Return the full schema for one operation' with specific details (HTTP method, path, mutation, request-body, response fields). This distinguishes it from sibling tools like aspro_list_methods and aspro_call by focusing on schema introspection for a single operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for one operation' provides clear context that this tool is used when detailed schema information for a single operation is needed, rather than listing all modules/entities/methods. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aspro_list_entitiesA
Read-only

List entities inside a given module along with the methods available on each entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleYesModule name, e.g. 'crm', 'fin', 'task'.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so safety and closed-world behavior are covered. The description adds that the result includes methods per entity, which is useful. However, it does not clarify whether the listing is exhaustive, paginated, or what the exact response structure is, so behavioral disclosure is only partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that conveys the core purpose and return value without any filler. Every word contributes meaning, and it is front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and a read-only annotation, the description is largely sufficient: it states what is listed and that methods are included. There is no output schema, but the description gives a reasonable idea of the return content. Missing details like sorting or filtering are not essential for this tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single 'module' parameter with a clear description and examples. The tool description adds no further semantic detail beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('entities inside a given module') and mentions the additional inclusion of methods on each entity. This clearly distinguishes it from sibling tools like aspro_list_modules (which lists modules) and aspro_list_methods (which likely lists methods in isolation), making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you know a module name and want to explore its entities, but it provides no explicit guidance on when to use this tool versus aspro_list_methods or aspro_search. No alternative tools or exclusions are mentioned, so the usage context is only inferred from the sibling names and the parameter requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aspro_list_methodsA
Read-only

List operations (HTTP method + path + short description) for a given module and optional entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNoEntity name. Omit to list operations across all entities of the module.
moduleYesModule name.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates a safe read operation. The description adds context about the return payload: each operation includes HTTP method, path, and short description. It also clarifies the 'optional entity' filtering behavior. No additional behavioral traits such as pagination or rate limits are disclosed, but that is not essential here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the core action ('List operations'), and every word contributes meaning. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, two parameters, and the presence of the readOnlyHint annotation, the description adequately communicates the tool's purpose, input scope, and return content (HTTP method, path, short description). It does not need to explain an output schema since none exists, and the context is clear enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both 'module' and 'entity', with 100% coverage. The description merely echoes the terms 'module' and 'optional entity' without adding extra semantics, so it adds minimal value over the schema, resulting in a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('operations') with clear modifiers ('for a given module and optional entity'). It distinguishes itself from sibling tools like aspro_list_modules and aspro_list_entities by focusing on operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the context of use: given a module and optionally an entity. It implies the user should first select a module (via aspro_list_modules) and optionally an entity, but does not explicitly state when to prefer this over aspro_search or aspro_describe. This is clear context without explicit exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aspro_list_modulesA
Read-only

List all top-level Aspro.Cloud API modules (crm, fin, agile, task, etc.) with entity and operation counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the read-only safety is known. The description adds valuable context by specifying it returns entity and operation counts, and that it lists top-level modules. No contradiction with annotations; the added detail exceeds the bare operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that packs the purpose, scope, and output details without redundant words. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with no output schema, the description is complete: it states what is listed, the scope (top-level modules), and the output content (entity and operation counts). No missing elements are apparent for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description need not explain parameter meanings. The schema confirms no properties, and the description focuses on output, which is appropriate. Baseline of 4 applies for no-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all top-level Aspro.Cloud API modules with counts, using a specific verb and resource. It explicitly names examples (crm, fin, agile, task) and distinguishes from sibling tools like list_entities and list_methods by focusing on module-level scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool—when an overview of top-level modules is needed. However, it does not explicitly mention when not to use it or name alternatives such as list_entities, so it stops short of full explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aspro_writeA
Destructive

Create, update or DELETE data in Aspro.Cloud. Destructive — the change is applied to the live account and cannot be undone from here. Run aspro_describe first. Pass the entity id via id and body fields via body. Note that delete is served over HTTP GET.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPath id, when the operation path contains {id}.
bodyNoForm-urlencoded body fields for POST operations.
queryNoQuery string parameters. Do not include api_key — it is added automatically.
entityYes
methodYes
moduleYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations' destructiveHint=true, the description adds specifics: changes are applied to the live account and cannot be undone, and delete is served over HTTP GET. This gives the agent crucial behavioral expectations not derivable from schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the main action, then warning, usage, and the GET quirk. No fluff – each sentence provides actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, destructive warning, workflow (aspro_describe), and a surprising HTTP GET behavior. While module/entity/method semantics are left to aspro_describe, the tool is generic and the instruction to run describe first is a viable handoff. Given no output schema, it does not explain return values, but that's acceptable for a write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers id, body, and query descriptions (50% coverage). The description reinforces id as entity id and body as body fields, but module, entity, and method remain undocumented. It points to aspro_describe for context, partially compensating, but the description adds limited new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes (create/update/delete) data in Aspro.Cloud, distinguishing it from read-only siblings like aspro_list_* and aspro_search. It also emphasizes the destructive nature, which is a key distinguishing trait.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to run aspro_describe first, setting up a workflow. The destructive warning implies caution, and the mention of create/update/delete implies it's for mutations, separating it from read tools. However, it doesn't explicitly name read-only alternatives or say when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.2.0
    • Changedaspro_describe1 field changed
      • addedInput schema / properties / include_raw_response_schema
        Added value: +{
        +  "description": "Include the untrimmed OpenAPI response schema. Verbose; off by default.",
        +  "type": "boolean"
        +}
    • Changedaspro_search1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Substring to search for, case-insensitive."New value: +"Keywords to search for, case-insensitive."
    • Addedaspro_write
  2. 6 tool updatesv0.1.1
    • First observedaspro_call
    • First observedaspro_describe
    • First observedaspro_list_entities
    • First observedaspro_list_methods
    • First observedaspro_list_modules
    • First observedaspro_search

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct role: discovery (modules, entities, methods), search, schema description, read execution, and write execution. There is no overlap in purpose, so an agent can easily select the right tool for each step.

Naming Consistency5/5

All tool names follow the aspro_ prefix with a descriptive verb: aspro_list_modules, aspro_list_entities, aspro_list_methods, aspro_search, aspro_describe, aspro_call, aspro_write. The pattern is consistent and predictable, making it easy to infer functionality from the name.

Tool Count5/5

Seven tools is well-scoped for an API exploration and interaction server. Each tool earns its place, covering the full workflow from discovery to execution without unnecessary redundancy or bloat.

Completeness5/5

The tool surface covers the complete API interaction lifecycle: exploring modules and entities, listing methods, searching, describing schemas, reading data, and writing data. No obvious gaps are apparent for the stated purpose of working with Aspro.Cloud.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Exposes Zoho CRM v6 REST API as structured tools for LLM agents via MCP, enabling CRUD operations, search, COQL queries, and more.
    11
    3
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables language models to interact with Bitrix24 CRM, providing tools to manage deals, leads, contacts, tasks, activities, users, files, chat messages, and live chat sessions.
    9 npm
    1
    -