Skip to main content
Glama

Andon SOP MCP Server

这是一个面向 WorkBuddy 的本地 MCP Server,用于连接 MES 系统,提供 SOP 上传辅助工具和异常报表查询工具。

当前项目通过 MCP stdio 协议与 WorkBuddy 通信,通过 HTTP REST 接口访问 MES 后端。

架构

WorkBuddy
   |
   | MCP Protocol (stdio)
   v
本地 MCP Server(本项目)
   |
   | HTTP REST / 登录鉴权
   v
MES 系统

Related MCP server: CMMS MCP Server

环境要求

  • Node.js >= 18

  • npm

  • WorkBuddy

  • 可访问的 MES 后端服务

  • MES 登录账号和密码,或可用的 MES 鉴权配置

快速开始

1. 安装依赖

进入项目根目录:

cd D:\svn-workspace\andon_sop-mcp

安装依赖:

npm install

2. 配置 MES 连接

配置文件位于:

config\mes-config.json

示例:

{
  "mes": {
    "baseUrl": "http://localhost:9998",
    "auth": {
      "type": "login",
      "username": "superadmin",
      "password": "1234554321",
      "loginUrl": "/main/login",
      "contentType": "application/x-www-form-urlencoded"
    },
    "timeout": 300000,
    "queryTimeoutMs": 25000,
    "retry": 3,
    "writeIntervalMs": 2400
  },
  "tools": {
    "likeSelectMaterielList": true,
    "selectCategoryTreeList": true,
    "uploadSop": true,
    "queryAbnormalReportPage": true
  }
}

字段说明:

字段

说明

mes.baseUrl

MES 后端地址。如果 MES 不在本机,不要使用 localhost,要改成真实地址。

mes.auth.type

当前使用 login,表示通过用户名密码登录 MES。

mes.auth.username

MES 用户名。

mes.auth.password

MES 密码。

mes.auth.loginUrl

MES 登录接口路径。

mes.timeout

普通请求超时时间,单位毫秒。

mes.queryTimeoutMs

查询类请求超时时间,单位毫秒。

mes.retry

网络失败后的重试次数。

mes.writeIntervalMs

写入类接口调用间隔,用于避开 MES 防重复提交限制。

tools.*

控制 MCP 工具是否启用,true 启用,false 禁用。

3. 编译

npm run build

编译后入口文件是:

dist\src\index.js

4. 本地手动启动测试

$env:MES_CONFIG_PATH="D:\svn-workspace\andon_sop-mcp\config\mes-config.json"
node D:\svn-workspace\andon_sop-mcp\dist\src\index.js

如果看到类似日志,说明 MCP Server 已启动:

MES TaskReport MCP Server starting...
Config loaded from: D:\svn-workspace\andon_sop-mcp\config\mes-config.json
Registered 4 tools: likeSelectMaterielList, selectCategoryTreeList, uploadSop, queryAbnormalReportPage
MES TaskReport MCP Server is ready. Waiting for requests...

这是 stdio MCP,启动后会等待客户端连接,终端没有继续输出是正常的。测试结束后按 Ctrl + C 退出。

WorkBuddy 配置

在 WorkBuddy 的自定义 MCP 配置中填写:

{
  "mcpServers": {
    "andon-sop-mcp": {
      "type": "stdio",
      "command": "node",
      "args": [
        "D:\\svn-workspace\\andon_sop-mcp\\dist\\src\\index.js"
      ],
      "cwd": "D:\\svn-workspace\\andon_sop-mcp",
      "env": {
        "MES_CONFIG_PATH": "D:\\svn-workspace\\andon_sop-mcp\\config\\mes-config.json"
      }
    }
  }
}

说明:

字段

说明

type

固定使用 stdio

command

启动命令,这里是 node

args

MCP 编译后的入口文件。

cwd

项目根目录,即 package.json 所在目录。建议保留。

env.MES_CONFIG_PATH

指定 mes-config.json 的绝对路径。建议保留,避免配置文件找不到。

Windows 路径写到 JSON 中时,\ 要写成 \\

可用工具

Tool

用途

likeSelectMaterielList

按物料名称模糊分页查询物料,返回物料 ID、名称、编码。

selectCategoryTreeList

查询 SOP 分类列表,返回分类 ID 和分类名称。

uploadSop

上传 SOP 文件到 MES。

queryAbnormalReportPage

分页查询异常报表,支持开单人、发生时间范围、关闭状态、异常类型、关闭人等条件。

典型使用流程

上传 SOP

  1. 准备或生成 SOP 文件,并拿到本地文件路径 file_path

  2. 如果只有物料名称,调用 likeSelectMaterielList 查询物料,让用户选择正确物料,使用表格中的物料 ID 作为 materielId

  3. 如果没有 SOP 分类 ID,调用 selectCategoryTreeList 查询分类,让用户选择正确分类,使用表格中的分类 ID 作为 esopCategoryId

  4. 确认 versionprocedureId

  5. 参数齐全后调用 uploadSop

uploadSop 必需参数:

参数

说明

file_path

本地 SOP 文件路径,MCP Server 所在机器必须能读取。

version

SOP 版本号。

materielId

物料 ID。

procedureId

工序 ID。

esopCategoryId

SOP 分类 ID。

不要猜测 materielIdprocedureIdesopCategoryId。如果用户没有明确提供,应先查询或追问。

查询异常报表

调用 queryAbnormalReportPage

常用参数:

参数

说明

page

页码,默认 1。

limit

每页数量,默认 5,最大 100。

billUserName

开单人姓名,模糊查询。

beginOccurDateStart

发生开始时间,格式 yyyy-MM-dd HH:mm:ss

beginOccurDateEnd

发生结束时间,格式 yyyy-MM-dd HH:mm:ss

closeStatus

关闭状态,模糊查询。

abnormalType

异常类型,模糊查询。

closeUserName

关闭人姓名,模糊查询。

返回结果中包含:

  • 当前页表格

  • hasPrevPage

  • prevPage

  • hasNextPage

  • nextPage

如果 hasNextPage=true,可以继续查询下一页。

Skills

项目内置了 WorkBuddy 使用流程说明:

skills\mes-sop-abnormal-workflows\SKILL.md

该技能重点说明:

  • 上传 SOP 应按什么流程调用 MCP 工具

  • 查询异常报表应使用哪个工具和哪些参数

  • 哪些 ID 不能猜,必须查询或询问用户

自包含打包

项目提供 scripts\bundle.mjs,用于把 MCP Server 打包成单个 JS 文件:

npm run bundle

输出文件:

andon_sop-mcp.js

这种方式适合分发给其他电脑使用。对方仍需要:

  • Node.js >= 18

  • config\mes-config.json

  • WorkBuddy MCP 配置指向打包后的 JS 文件

如果执行 npm run bundle 报找不到 esbuild,先执行:

npm install

项目结构

andon_sop-mcp/
├─ config/
│  ├─ mes-config.json              # MES 实际连接配置
│  ├─ mes-config.example.json      # MES 配置示例
│  └─ 说明.txt                     # WorkBuddy 配置简要说明
├─ docs/
│  └─ workbuddy配置教程.md          # WorkBuddy 详细配置教程
├─ scripts/
│  └─ bundle.mjs                   # esbuild 打包脚本
├─ skills/
│  └─ mes-sop-abnormal-workflows/
│     └─ SKILL.md                  # WorkBuddy 业务流程技能说明
├─ src/
│  ├─ index.ts                     # MCP Server 入口
│  ├─ tools/
│  │  ├─ index.ts                  # 工具注册
│  │  ├─ like_select_materiel_list.ts
│  │  ├─ select_category_tree_list.ts
│  │  ├─ upload_sop.ts
│  │  └─ query_abnormal_report_page.ts
│  ├─ services/
│  │  ├─ mesClient.ts              # MES HTTP 客户端
│  │  ├─ authService.ts            # 登录和 token 管理
│  │  └─ entityResolverService.ts
│  ├─ types/
│  │  ├─ api.ts
│  │  └─ toolContent.ts
│  └─ utils/
│     └─ logger.ts                 # 日志输出到 stderr,避免干扰 MCP stdio
├─ test/
├─ package.json
└─ tsconfig.json

常见问题

MCP error -32000: Connection closed

通常表示 WorkBuddy 启动了本地 MCP 进程,但 MCP 进程马上退出。

优先检查:

  1. 是否执行过 npm run build

  2. dist\src\index.js 是否存在。

  3. WorkBuddy 配置里的 cwd 是否是项目根目录。

  4. MES_CONFIG_PATH 是否指向真实存在的 config\mes-config.json

  5. mes-config.json 是否是合法 JSON。

  6. node 命令是否可用。

MES 接口连不上

检查 config\mes-config.json

"baseUrl": "http://localhost:9998"

如果 MES 后端不在本机,必须改成真实 MES 地址。

工具没有出现

检查 config\mes-config.jsontools 配置。设置为 false 的工具不会注册。

开发命令

# 编译 TypeScript
npm run build

# 运行测试
npm test

# 启动 MCP Server
npm start

# 打包成单个 JS 文件
npm run bundle

扩展工具

新增 MCP 工具时:

  1. src\tools 下新增工具文件。

  2. 导出 namedescriptioninputSchemahandler

  3. src\tools\index.ts 中注册。

  4. config\mes-config.jsontools 中增加开关。

  5. 添加对应测试。

Available Tools

11 tools
deleteProjProjectA

批量删除项目,调用 /projProject/delEntityById。调用本工具前必须先调用 queryProjProjectList 查询项目并让用户选择要删除的项目。只有 projectStatus 为 0(未开始)的项目允许删除;其他状态不能删除。本工具会在删除前校验每个项目的状态。

ParametersJSON Schema
NameRequiredDescriptionDefault
projectsYes要删除的项目列表。必须来自 queryProjProjectList 查询结果,支持批量删除。

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool validates each project's status before deletion, which adds transparency. However, it does not explicitly state that deletion is irreversible or what happens to related data. Still, the description provides key behavioral context beyond just the action.

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, all essential. No filler. Front-loaded with the core action and endpoint. Every sentence adds value: batch delete, prerequisite, status condition, and validation behavior.

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?

Given no output schema, the description covers the prerequisite, validation, and batch nature adequately. It lacks details on return value or error handling, but for a delete tool with clear constraints, it is sufficiently complete for an agent to use 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?

Schema coverage is 100%, with per-parameter descriptions already covering origin from queryProjProjectList and status constraint. The description reinforces these points but does not add substantially new information beyond the schema. Baseline 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 clearly states the verb '删除' (delete) and the resource '项目' (projects), specifying it is for batch deletion. It distinguishes from sibling tools like queryProjProjectList (query) and save/update tools, making the purpose unambiguous.

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?

Explicitly states the prerequisite: must call queryProjProjectList first and let user select projects. Also provides a clear condition: only projects with projectStatus 0 (未开始) can be deleted, and other statuses are not allowed. This gives strong guidance on when and when not to use the tool.

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

deleteProjTaskA

批量删除项目任务,调用 /projTask/delEntityById。调用本工具前必须先调用 queryProjectTask 查询任务树,并让用户选择要删除的任务。任务 id 必须来自 queryProjectTask 返回的任务记录 id。本工具会把多个任务 id 用英文逗号拼接为 ids 后提交给后端。

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes要删除的任务列表。必须来自 queryProjectTask 查询结果,支持批量删除。

TDQS

A4.6/5.0
Behavior4/5

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

No annotations exist, so the description carries full burden. It discloses the batch deletion behavior and the ID concatenation. However, it does not explicitly mention the destructive nature (e.g., irreversible deletion) or potential side effects, though it is implied.

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 two sentences in Chinese, concise and front-loaded with the core purpose. Every sentence adds necessary context without redundancy.

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?

Given no output schema, the description could mention expected return values or error handling. However, it adequately covers the tool's input constraints and prerequisite workflow. The overall context is sufficient for an agent.

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?

Schema coverage is 100%, yet the description adds value by explaining how the tool processes the tasks array (concatenating IDs) and that parentId and taskName are optional for display. This goes beyond the schema's minimal descriptions.

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 is for batch deleting project tasks and provides the API endpoint. It distinguishes from sibling tools like saveProjTask and updateProjTask, which are for save/update operations.

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?

Explicitly instructs to call queryProjectTask first and let the user select tasks. It also clarifies that task IDs must come from that query and that the tool concatenates multiple IDs into a comma-separated string.

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

queryDutyListA

查询项目任务责任人列表。用于调用 saveProjTask 前选择责任人。会读取 AndonSysUser 表单配置,查询 /user/queryPageMap,并固定带上 accountType=0。调用 saveProjTask 时,dutyUserId 使用返回 records 中的 id,dutyUserName 使用同一条 records 的 display 中的用户姓名字段。

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo页码,从 1 开始。默认 1。
limitNo每页数量,默认 20,最大 100。
containNo初始化表单字段时只包含指定字段,默认空。
excludeNo初始化表单字段时排除指定字段,默认空。
filtersNo动态查询条件。key 必须是 AndonSysUser 表单字段 field;文本字段模糊查,时间字段传 {start,end} 范围查。

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully shoulders the burden. It reveals internal behavior: reads AndonSysUser config, queries /user/queryPageMap, always includes accountType=0, and describes the mapping of returned fields for saveProjTask. This transparently informs the agent of side-effects and prerequisites.

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 concise, starting with the core purpose in the first sentence, followed by necessary behavioral details. No redundant sentences; every sentence adds value.

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?

Given no output schema and no annotations, the description is fairly complete: it explains input, internal processing, and output usage. However, it does not explicitly mention pagination details (though schema has page/limit). Slight gap but sufficient for the primary use case.

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 input schema already has 100% parameter descriptions, so baseline is 3. The description adds value by explaining the filters parameter semantics (keys must be AndonSysUser fields) and the fixed accountType=0 behavior, which is not in the schema. This enhances schema information.

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 explicitly states it queries the project task responsible person list, with a clear purpose: to select the responsible person before calling saveProjTask. This distinguishes it from sibling tools like queryProjUser or queryProjProjectList, which serve different querying needs.

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 clearly indicates when to use this tool (before saveProjTask) and explains how to use the returned data (dutyUserId and dutyUserName). However, it does not explicitly mention when not to use it or compare with alternatives like queryProjUser, which could also query users.

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

queryProjCustomerA

按 MES 表单配置动态分页查询项目客户列表。会先读取 ProjCustomer 表单字段配置,构建查询参数,查询 /projCustomer/queryPageMap,并使用数据字典翻译展示值。返回的 Work Buddy 查询上下文会包含每条记录的 id,方便后续按客户记录继续操作。

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo页码,从 1 开始。默认 1。
limitNo每页数量,默认 10,最大 100。
containNo初始化表单字段时只包含指定字段,默认空。
excludeNo初始化表单字段时排除指定字段,默认空。
filtersNo动态查询条件。key 必须是 ProjCustomer 表单字段 field;文本字段模糊查,时间字段传 {start,end} 范围查。

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description bears full responsibility. It discloses key behaviors: reading form config, building dynamic query parameters, querying an endpoint, translating values with data dictionary, and including IDs in return. This provides solid insight into internal workings, though it does not mention permissions or side effects.

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 concise (3 sentences) and well-structured: first sentence states core function, second explains the process, third describes return value. Every sentence adds unique value with no wasted words.

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

Completeness3/5

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

Given no output schema, the description partially explains return: it mentions IDs in context for follow-up operations. However, it does not describe full response structure (e.g., pagination metadata, total count). For a paginated query, this omission reduces completeness.

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 coverage is 100%, so baseline is 3. The description adds general context (dynamic queries, dictionary translation) but does not enhance individual parameter semantics beyond the schema's own descriptions. The filters parameter gets some extra context about dynamic conditions, but not enough to raise the score.

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: dynamically paginated query of project customer list according to MES form configuration. It specifies the action (query), resource (project customer list), and method (dynamic pagination). This distinguishes it from sibling tools like queryProjProjectList which query a different resource.

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 for querying project customers and mentions that returned IDs enable subsequent operations, but it does not explicitly state when to use this vs. alternatives, nor does it provide when-not-to-use guidance. No exclusions or prerequisites are mentioned.

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

queryProjectTaskA

查询指定项目的任务树。调用本工具前必须先调用 queryProjProjectList 查询项目列表,并让用户选择正确的项目 id。工具会调用 /projTask/getTasksByProject 获取任务,组装为树形结构,并用 notify_type、proj_status 数据字典翻译通知类型和任务状态。

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes项目ID。调用前先使用 queryProjProjectList 让用户选择正确项目。

TDQS

A4.4/5.0
Behavior4/5

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

Discloses internal API call, assembly into tree structure, and data dictionary translation. Without annotations, this provides good insight, though read-only nature is implied rather than explicit.

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?

Two sentences, each adding value: purpose and usage guideline. No unnecessary 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?

Explains internal steps and transformation, sufficient for a simple query tool. Lacks explicit output format description but mentions 'tree structure'.

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 description already covers projectId with prerequisite info. Description adds no new semantic information beyond reinforcing the same guidance.

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?

Description clearly states the verb (query) and resource (task tree of a project). It distinguishes from sibling tools like queryProjProjectList (list projects) and CRUD tools.

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?

Explicitly states prerequisite: must call queryProjProjectList first and let user select project ID. Provides clear step-by-step guidance.

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

queryProjProjectListA

按 MES 表单配置动态分页查询项目管理列表。会先读取 ProjProject 表单字段配置,构建查询参数,查询 /projProject/queryPageMap,并使用数据字典翻译展示值。

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo页码,从 1 开始。默认 1。
limitNo每页数量,默认 10,最大 100。
containNo初始化表单字段时只包含指定字段,默认空。
excludeNo初始化表单字段时排除指定字段,默认空。
filtersNo动态查询条件。key 必须是 ProjProject 表单字段 field;文本字段模糊查,时间字段传 {start,end} 范围查。

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full burden and reveals internal steps: reading form config, building params, querying endpoint, translating values. It does not explicitly state the tool is read-only but implies it via 'query', though more explicit would be better.

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?

Two sentences: first states purpose, second explains process. Both are relevant and concise, with no wasted words.

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

Completeness3/5

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

The description explains the query process and translation but does not describe the return format (e.g., pagination structure). Given no output schema, this information would be helpful for an agent to parse results correctly.

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?

Schema coverage is 100% with parameter descriptions. The description adds context about dynamic query building and how filters use ProjProject form fields (fuzzy for text, range for time), enriching the schema's basic descriptions.

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 that the tool queries a project management list with dynamic pagination based on MES form configuration. It specifies the endpoint and data dictionary translation, distinguishing it from sibling tools like queryProjectTask.

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 does not provide explicit guidance on when to use this tool versus alternatives like queryProjectTask. It only describes what the tool does, leaving the agent to infer usage context.

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

queryProjUserA

按 MES 表单配置动态分页查询用户列表。会先读取 User 表单字段配置,构建查询参数,查询 /user/queryPageMap,并使用数据字典翻译展示值。返回的 Work Buddy 查询上下文会包含每条记录的 id,方便后续按用户记录继续操作。

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo页码,从 1 开始。默认 1。
limitNo每页数量,默认 10,最大 100。
containNo初始化表单字段时只包含指定字段,默认空。
excludeNo初始化表单字段时排除指定字段,默认空。
filtersNo动态查询条件。key 必须是 User 表单字段 field;文本字段模糊查,时间字段传 {start,end} 范围查。

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses key behaviors: reads form configuration, builds query, uses data dictionary translations, returns context with IDs. It does not explicitly state read-only nature or potential side effects, but 'query' implies safe. Missing details on rate limits or permissions, but covers core behavior.

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?

Description is three sentences in Chinese, efficiently stating the purpose, process, and return context. No redundant phrases, front-loaded key action 'dynamically paginate query user list'. Every sentence adds value.

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?

Given complexity (dynamic filtering, configuration-based, data dictionary translation) and no output schema, the description adequately explains the process and return context (includes id). Lacks details on error handling or permission requirements, but sufficient for an agent to understand usage.

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 description coverage is 100%, so baseline is 3. Description adds context on overall flow (reading config, building query) but does not add new per-parameter meaning beyond what the schema already provides for each parameter. The filters parameter is elaborated in the schema description, matching description text.

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?

Description clearly states it queries user list with dynamic pagination and configuration-based filtering. It specifies the verb 'query', resource 'user list', and distinct behavior like using MES form configuration. This differentiates it from sibling tools that operate on projects or tasks.

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?

Description implies use for user queries but does not explicitly state when to choose this tool over alternatives like queryProjCustomer or queryProjProjectList. It lacks 'when to use' and 'when not to use' guidance. However, the context of sibling tools and the specific 'user list' resource provides implicit differentiation.

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

saveProjProjectA

新增项目,直接调用 /projProject/saveEntityMap。调用本工具前必须先调用 queryProjCustomer 查询并让用户选择客户;customerName、customerCode、customerId 必须来自 queryProjCustomer 返回的同一条客户记录。若要填写项目经理,还必须先调用 queryProjUser 查询并让用户选择用户;userId 必须来自 queryProjUser 返回记录的 id,pmName 应使用同一条用户记录的名称。projectStatus 固定为 0,id 固定为空字符串。

ParametersJSON Schema
NameRequiredDescriptionDefault
pmNameNo项目经理名称,可选。若传 userId,应使用 queryProjUser 返回的同一条用户记录的名称。
userIdNo负责人用户ID,可选。必须来自 queryProjUser 返回的用户记录 id。
planHoursNo计划工时,可选。
customerIdYes客户ID。必须来自 queryProjCustomer 返回的同一条客户记录的 id。
projectCodeNo项目编码,可选。
projectNameNo项目名称,可选。
requirementNo需求说明,可选。
customerCodeYes客户编码。必须来自 queryProjCustomer 返回的同一条客户记录。
customerNameYes客户名称。必须来自 queryProjCustomer 返回的同一条客户记录。
deliveryDateNo交付日期,可选,格式建议为 YYYY-MM-DD。

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses direct API invocation and fixed fields, adding context beyond creation. However, it omits details like error handling, permissions, or idempotency, but for a creation tool the disclosed preconditions and fixed values are substantial.

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 front-loaded with the core purpose, then succinctly lists prerequisites and fixed fields. Every sentence adds necessary information without redundancy, making it efficient yet comprehensive.

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 tool with 10 parameters, 3 required, and no output schema, the description covers prerequisites, fixed fields, and parameter sources. It lacks return value details, but given no output schema, this is acceptable. Overall, it provides most needed context.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the dependency on queryProjCustomer and queryProjUser results for customer and user parameters, and revealing fixed values for id and projectStatus (not in schema). This context beyond schema justifies a 4.

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: '新增项目' (add new project) and specifies the direct API call /projProject/saveEntityMap. It distinguishes from sibling tools like queryProjProjectList (list), updateProjProject (update), and deleteProjProject (delete) by focusing on creation.

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 explicitly lists prerequisites: must call queryProjCustomer first and have user select customer for customerName, customerCode, customerId; and if filling manager, must call queryProjUser for userId and pmName. It also notes fixed parameters (projectStatus=0, id=''). This provides clear when-to-use and how-to-use guidance.

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

saveProjTaskA

新增项目任务或子任务,直接调用 /projTask/saveEntityMap。调用本工具前必须先调用 queryProjProjectList 查询并让用户选择项目,projectId 必须来自项目记录 id;必须先调用 queryDutyList 查询并让用户选择责任人,dutyUserId 和 dutyUserName 必须来自同一条责任人记录。新增子任务时还需要传 parentId,parentId 应来自 queryProjectTask 返回的任务 id。progress 固定为 0,delayDays 固定为 0。

ParametersJSON Schema
NameRequiredDescriptionDefault
parentIdNo父任务ID,可选。新增子任务时必填,应来自 queryProjectTask 返回的任务 id;新增顶级任务时不要传。
taskNameYes任务名称。
planHoursNo计划工时,可选。
projectIdYes项目ID。必须来自 queryProjProjectList 返回的项目记录 id。
dutyUserIdYes责任人用户ID。必须来自 queryDutyList 返回的同一条责任人记录 id。
notifyTypeYes通知类型。应使用系统支持的通知类型值,例如 0 或 1。
taskDetailNo任务详情,可选。
planEndDateNo计划结束日期,可选,格式建议为 YYYY-MM-DD。
dutyUserNameYes责任人姓名。必须来自 queryDutyList 返回的同一条责任人记录名称。
planStartDateNo计划开始日期,可选,格式建议为 YYYY-MM-DD。

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that progress and delayDays are fixed to 0, and mentions the underlying API call. However, it does not discuss side effects, authorization requirements, or error conditions, but the detailed prerequisites provide sufficient behavioral context for correct invocation.

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

Conciseness4/5

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

The description is a single paragraph that front-loads the action and then lists prerequisites sequentially. It is concise for the amount of information provided, though slightly run-on. Every sentence adds value.

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

Completeness3/5

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

Given 10 parameters, 5 required, and no output schema, the description covers prerequisite steps and fixed fields. However, it does not explain the return value or error handling, leaving some gaps for the agent regarding what happens after invocation.

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 coverage is 100%, so each parameter has a description. The tool description adds overall context about the origin of certain parameters (e.g., from prior queries) but does not add meaning beyond what is already in the schema. Baseline 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 explicitly states the tool is for adding new project tasks or subtasks, using the verb '新增' (add) and resource '项目任务或子任务' (project task or subtask). It distinguishes itself from sibling tools like updateProjTask and deleteProjTask by focusing on creation.

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 provides explicit prerequisites: must call queryProjProjectList first for projectId, queryDutyList for dutyUserId and dutyUserName, and queryProjectTask for parentId when adding subtasks. It also states that progress and delayDays are fixed to 0, giving clear when-to-use guidance.

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

updateProjProjectA

修改项目信息,调用 /projProject/saveEntityMap。调用本工具前必须先调用 queryProjProjectList 查询项目并让用户选择要修改的项目,id 必须来自项目记录 id。除了 id 以外,只传需要修改的字段。若修改客户,customerName、customerCode、customerId 必须来自 queryProjCustomer 返回的同一条客户记录并一起传入;若修改项目经理,pmName、userId 必须来自 queryProjUser 返回的同一条用户记录并一起传入。

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes项目ID。必须来自 queryProjProjectList 返回记录的 id。
pmNameNo项目经理名称,可选。若修改项目经理,必须来自 queryProjUser 返回的同一条用户记录,并与 userId 一起传入。
userIdNo负责人用户ID,可选。若修改项目经理,必须来自 queryProjUser 返回的同一条用户记录 id,并与 pmName 一起传入。
planHoursNo计划工时,可选。
customerIdNo客户ID,可选。若修改客户,必须来自 queryProjCustomer 返回的同一条客户记录 id,并与 customerName、customerCode 一起传入。
projectCodeNo项目编码,可选。
projectNameNo项目名称,可选。
requirementNo需求说明,可选。
customerCodeNo客户编码,可选。若修改客户,必须来自 queryProjCustomer 返回的同一条客户记录,并与 customerName、customerId 一起传入。
customerNameNo客户名称,可选。若修改客户,必须来自 queryProjCustomer 返回的同一条客户记录,并与 customerCode、customerId 一起传入。
deliveryDateNo交付日期,可选,格式建议为 YYYY-MM-DD。
projectStatusNo项目状态,可选。只有明确要修改状态时才传。

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the underlying endpoint call, the mutation nature, dependencies on prior queries, and field consistency requirements. It lacks details on error handling or partial success, but for an update tool, the behavioral context added beyond the schema is substantial.

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

Conciseness4/5

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

The description is a single paragraph with dense, essential information. It is front-loaded with the action, then prerequisites, then detailed rules. Every sentence contributes value, though a bullet-point structure could improve readability. No excess wording is present.

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?

Given the complexity (12 parameters, no output schema), the description covers the main usage flow: prerequisites, valid id sources, and field constraints. It does not specify the return value or error handling, but for an update tool, the usage context is well-addressed. The schema descriptions further support completeness.

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?

Schema coverage is 100%, and the description adds higher-level rules: relationships between parameters (e.g., customerName, customerCode, customerId must be from the same record; pmName and userId together). It also reiterates that id must come from a prior query. This adds meaning beyond the individual parameter descriptions.

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 '修改项目信息' (modify project information), specifying the verb and resource. It distinguishes the tool from siblings like updateProjTask, deleteProjProject, and saveProjProject by outlining specific prerequisites and constraints, ensuring the agent understands the exact purpose.

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 explicitly instructs to call queryProjProjectList first, mandates that the id must come from that query, and advises to only pass fields that need modification. It provides specific rules for modifying customer or project manager fields, including which other tools to query (queryProjCustomer, queryProjUser) and how to pass related parameters together. This gives clear when-to-use and when-not-to-use guidance.

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

updateProjTaskA

修改项目任务信息,调用 /projTask/saveEntityMap。调用本工具前必须先调用 queryProjectTask 查询任务树并让用户选择要修改的任务,id 必须来自任务记录 id。除了 id 以外,只传需要修改的字段。若修改责任人,dutyUserId、dutyUserName 必须来自 queryDutyList 返回的同一条责任人记录并一起传入。

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes任务ID。必须来自 queryProjectTask 返回任务记录的 id。
parentIdNo父任务ID,可选。若调整为子任务,应来自 queryProjectTask 返回任务 id。
progressNo进度,可选。只有明确要修改进度时才传。
taskNameNo任务名称,可选。
delayDaysNo延期天数,可选。只有明确要修改延期天数时才传。
planHoursNo计划工时,可选。
projectIdNo项目ID,可选。一般不建议修改;如需修改,必须来自 queryProjProjectList 返回项目记录 id。
dutyUserIdNo责任人用户ID,可选。若修改责任人,必须来自 queryDutyList 返回记录 id,并与 dutyUserName 一起传入。
notifyTypeNo通知类型,可选。
taskDetailNo任务详情,可选。
planEndDateNo计划结束日期,可选,格式建议为 YYYY-MM-DD。
dutyUserNameNo责任人姓名,可选。若修改责任人,必须来自 queryDutyList 返回同一条记录,并与 dutyUserId 一起传入。
planStartDateNo计划开始日期,可选,格式建议为 YYYY-MM-DD。

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses the underlying API call and parameter dependencies, but lacks details on error behavior, response format, or whether the operation is reversible. Moderate transparency for a mutation tool.

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?

Three sentences, each essential and well-structured. Front-loaded with purpose and prerequisite. No redundant information, highly efficient.

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

Completeness3/5

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

Given 13 parameters and no output schema, the description adequately covers update operation and special parameter rules. However, it lacks information on return value, error handling, and whether updates are partial or full. Could be more complete for a complex 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?

Schema covers all 13 parameters with descriptions. The tool description adds significant value beyond schema by explaining usage rules: only pass modified fields, id must come from queryProjectTask, duty fields must come together from queryDutyList. This enhances parameter understanding.

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 modifies project task information and refers to the specific API endpoint. It distinguishes itself from siblings like saveProjTask (create) and deleteProjTask by focusing on update, and mentions prerequisites that differentiate usage from query tools.

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?

Explicitly states prerequisite of calling queryProjectTask first, and instructs to only pass modified fields. Provides specific constraints for dutyUserId/dutyUserName. Does not explicitly mention when not to use (e.g., for creation), but this is implicit given sibling context.

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. 11 tool updatesv1.0.0
    • First observeddeleteProjProject
    • First observeddeleteProjTask
    • First observedqueryDutyList
    • First observedqueryProjCustomer
    • First observedqueryProjectTask
    • First observedqueryProjProjectList
    • First observedqueryProjUser
    • First observedsaveProjProject
    • First observedsaveProjTask
    • First observedupdateProjProject
    • First observedupdateProjTask

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct operation: project CRUD, task CRUD, and supporting queries (customers, users, duty list). No two tools have overlapping purposes; descriptions clearly differentiate them.

Naming Consistency4/5

Tools follow a verb+noun pattern with camelCase (e.g., queryProjProjectList, saveProjTask). Minor inconsistency: 'queryDutyList' lacks the 'Proj' prefix present in others, but overall pattern is predictable.

Tool Count4/5

11 tools cover the core operations of a project and task management system: 4 for projects (create, read list, update, delete), 4 for tasks (create, read tree, update, delete), and 3 supporting queries. This is well-scoped, though slightly on the higher side.

Completeness4/5

CRUD operations are covered for both projects and tasks, along with necessary supporting queries (customers, users, duty list). However, there is no explicit tool to update project status or get a single entity by ID, leaving minor gaps.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers