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 사양을 포함하고 있어, 모델이 스스로 모듈, 엔티티 및 메서드를 검색하고 안전하게 호출할 수 있습니다.

기능

  • 자체 설명(Self-describing). 모델은 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 버전이 필요합니다.

설정

예제 env 파일을 복사하여 내용을 채우세요:

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 파일을 절대 커밋하지 마십시오.

  • 서버에는 허용 목록(allowlist)이 없습니다. 설정이 완료되면 사양에 설명된 모든 엔드포인트(예: /delete/{id}와 같은 파괴적인 작업 포함)를 호출할 수 있습니다. 필요한 최소 권한만 가진 전용 API 키를 사용하십시오.

  • 도구 출력을 신뢰할 수 없는 것으로 처리하십시오. Aspro 엔티티(사용자 정의 필드 값, 설명 등)에는 사용자가 제공한 콘텐츠가 포함될 수 있습니다.

기여

이슈 및 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
    -