mcp-yearning
The mcp-yearning server provides an AI-friendly interface to query, manage, and audit SQL work orders and data queries on the Yearning SQL review platform. Key capabilities include:
Metadata & Schema Exploration: View current user information; list available data sources (filtered by permission type), databases within sources, tables within databases, and detailed table schemas (fields, indexes).
SQL Order Management: Perform pre-submission SQL syntax/audit checks; submit DDL/DML change orders with backup, delay, and assignee options; view personal orders (paginated, filterable); get order details with execution info; track audit timelines; retrieve auto-generated rollback SQL; undo/withdraw self-submitted orders.
Audit Workflow: For auditors: list pending or reviewed orders; approve (triggers execution on final step with destructive-action elicitation), reject, or undo audits.
Read-Only Query Execution: Run SELECT queries via WebSocket with audit logging; check query approval requirements; submit query access requests when auditing is enforced.
Comments & Collaboration: Read and post comments on work orders for team collaboration.
Flexible Deployment: Supports multiple transport protocols (stdio, SSE, streamable-HTTP) for local, containerized, or serverless/stateless HTTP deployment.
Automated Authentication: Automatically manages JWT token acquisition and refresh using provided credentials; optional Bearer token for HTTP transport security.
Safety & Access Controls: Global read-only mode (
YEARNING_READ_ONLY=true) excludes all write tools; destructive operations require explicit confirmation via MCP 2.0 elicitation; idempotent operation hints.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-yearningshow my orders that need review"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-yearning
Yearning MCP Server - 让 AI 助手能够查询和管理 Yearning SQL 审核平台的工单与查询:浏览数据源与表结构、提交并审核 SQL 工单、执行只读查询等。
基于 Yearning REST / WebSocket API(/api/v2,JWT Bearer 认证);列表类与查询执行走 WebSocket,其余为 REST。
特性
多协议传输:
stdio(默认)、sse、streamable-http,一套代码适配本地与远程场景接口认证:HTTP 传输支持 Bearer Token 保护,未授权请求返回
401原生账号密码登录:用户名/密码登录换取 JWT,
401时自动重新登录并重放请求,无需手工维护 TokenJWT 自动管理:登录态缓存并在 8 小时过期前(提前 0.5h)主动续登,全程无感
REST + WebSocket 统一封装:列表类接口(我的工单、审核列表、评论)与查询执行走 WebSocket,已封装为「连接→发一帧→收一帧→关闭」的伪 REST;查询执行额外用 msgpack 编解码
信封解析:Yearning 恒返回 HTTP 200 + 信封
{payload, code:1200, text};非 1200 视为业务错误Yearning 原生概念:直接以
数据源 / 库 / 表 / SQL 工单 / 审核流程组织操作,读写一体危险操作防护:审核工单(agree)等高危操作带
destructiveHint注解,撤回工单带idempotentHint注解,均需明确动作参数破坏性操作 MRTR 确认:同意工单(agree)等高危操作通过 MCP 2.0 Elicitation 机制弹出确认表单,需用户明确同意后才执行
MCP Resources:以
yearning://URI 暴露用户信息、数据源列表等只读元数据,客户端可直接读取Stateless HTTP:支持无状态 HTTP 模式,每次请求独立处理、无会话状态,适合 Serverless / 多副本部署
灵活部署:
uvx免安装运行、Docker 构建即用
Related MCP server: mcp-mysql-explorer
前置准备
准备一个可访问的 Yearning 实例。你需要准备:
Yearning 地址(如
http://localhost:8000)登录用户名 / 密码(常规账号或 LDAP 账号)
账号在 Yearning 内的角色决定你能看到哪些数据源、能提交/审核哪些工单;MCP Server 本身不做任何鉴权,仅原样转发请求。
快速开始
MCP 客户端(stdio,本地)
以 Claude Code 为例,在项目 .mcp.json 或全局 ~/.claude.json 中添加:
{
"mcpServers": {
"yearning": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-yearning"],
"env": {
"YEARNING_URL": "http://localhost:8000",
"YEARNING_USERNAME": "your-user",
"YEARNING_PASSWORD": "your-password",
"YEARNING_LOGIN_TYPE": "general",
"YEARNING_READ_ONLY": "false"
}
}
}
}Cursor、OpenCode、Claude Desktop 等客户端的配置格式相同,核心均为
command: uvx+args: ["mcp-yearning"],按各客户端语法填入YEARNING_*环境变量即可。
Docker(公开镜像,免构建)
已发布公开镜像 ghcr.io/zhouweico/mcp-yearning:latest,无需本地构建。下面以 Claude Code 为例,说明如何用 docker 命令运行并配置 mcp-yearning。
方式一:stdio(由客户端拉起容器,适合本地集成)
在 Claude Code 的 .mcp.json 中直接用 docker 作为启动命令,客户端会以 stdio 管道与容器内服务通信:
{
"mcpServers": {
"yearning": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/zhouweico/mcp-yearning:latest"],
"env": {
"YEARNING_URL": "http://your-yearning:8000",
"YEARNING_USERNAME": "your-user",
"YEARNING_PASSWORD": "your-password"
}
}
}
}必须带
-i(保持 stdin 管道),否则容器内的 stdio 服务无法与客户端通信。
方式二:HTTP + 认证(容器独立运行,客户端远程连接,适合多客户端共享)
先启动容器:
docker run -d -p 8080:8080 \
-e MCP_TRANSPORT=streamable-http \
-e MCP_AUTH_TOKEN=your-strong-token \
-e YEARNING_URL=http://your-yearning:8000 \
-e YEARNING_USERNAME=your-user \
-e YEARNING_PASSWORD=your-password \
ghcr.io/zhouweico/mcp-yearning:latest再在 Claude Code 的 .mcp.json 中通过 HTTP 连接:
{
"mcpServers": {
"yearning": {
"type": "streamable-http",
"url": "http://localhost:8080/mcp",
"headers": {
"Authorization": "Bearer your-strong-token"
}
}
}
}可用工具
只读工具(14 个)
按业务域分组排列:元数据 → SQL 工单 → 查询与评论。
工具 | 分组 | 说明 | 对应 API |
| 元数据 | 当前用户信息、可查询数据源 |
|
| 元数据 | 列出有权限的数据源 |
|
| 元数据 | 数据源下的库列表 |
|
| 元数据 | 库下的表列表 |
|
| 元数据 | 表结构(字段 + 索引) |
|
| SQL 工单 | 提交前 SQL 审核检测( |
|
| SQL 工单 | 我的工单列表(分页/状态/关键字过滤) |
|
| SQL 工单 | 工单详情(SQL 明细 + 完整 SQL) |
|
| SQL 工单 | 工单审核时间线与流程步骤 |
|
| SQL 工单 | 获取工单回滚 SQL |
|
| SQL 工单 | 待我审核的工单列表 |
|
| 查询与评论 | 查询审核开关 + 我的查询工单状态 |
|
| 查询与评论 | 执行只读 SELECT 查询(不修改数据;Yearning 留存查询审计记录) |
|
| 查询与评论 | 读取工单评论 |
|
写工具(5 个)
按工单生命周期排列:提交 → 撤回 → 审核 → 查询申请 → 评论。
工具 | 分组 | 说明 | 对应 API |
| SQL 工单 | 提交 SQL 工单(DDL/DML) |
|
| SQL 工单 | 撤回自己未执行的工单 |
|
| SQL 工单 | 审核工单:agree/reject/undo(agree 即批准变更落地,高危) |
|
| 查询与评论 | 提交数据查询申请 |
|
| 查询与评论 | 发表工单评论 |
|
未提供的操作:管理端(admin)能力(用户 / 数据源 / 规则管理)与 AI 辅助(text2sql / advisor)为后续 Phase,未包含在本期;此类操作请通过 Yearning 控制台人工执行。
只读 / 写的区别:上表「只读工具」在
YEARNING_READ_ONLY=true下仍然可用;「写工具」在该模式下会被完全排除——不出现在tools/list中,Agent 既看不到也无法调用(注册期排除,非运行期拦截)。这样生产环境开启只读后,Agent 只能查询、绝无意外变更工单的风险。审核/撤回为危险操作:
yearning_audit_order(agree)会批准一条 DDL/DML 变更在数据源执行,yearning_undo_order会撤回工单;调用时务必明确动作参数,避免对话中的误操作直接落到生产。MRTR 确认:
yearning_audit_order(agree)为破坏性操作,执行前会通过 MCP 2.0 Elicitation 弹出确认表单,需用户明确同意后才执行。若客户端不支持 Elicitation(如 stdio 模式),则降级为直接执行。
配置
环境变量
MCP 传输与认证
变量 | 说明 | 默认值 |
| 传输协议: |
|
| HTTP 传输监听地址(stdio 忽略),默认仅本地回环;对外暴露需显式设置并务必配置 |
|
| HTTP 传输监听端口(stdio 忽略) |
|
| 设置后启用 Bearer Token 认证,保护 HTTP 接口 | -(不鉴权) |
| 启用无状态 HTTP 模式,适合 Serverless 部署(详见下方说明) |
|
| 日志级别: |
|
Yearning 连接
变量 | 说明 | 默认值 |
| Yearning 地址 |
|
| 登录用户名(必填) | - |
| 登录密码(必填) | - |
| 登录类型: |
|
| 请求超时(秒) |
|
| 只读模式,排除全部写工具(适合生产环境) |
|
| 跳过 TLS 证书验证,用于自签名证书环境(详见下方说明) |
|
认证凭证只需用户名/密码:客户端首次请求时自动调用
POST /api/v2/login(或ldap)换取 JWT 并缓存;收到401时先尝试重新登录、失败则重放原请求(最多一次),全程无需人工干预。注意区分两类凭证:
MCP_AUTH_TOKEN保护本 MCP Server 的 HTTP 接口;YEARNING_USERNAME/YEARNING_PASSWORD用于登录 Yearning,两者互不相关。
Yearning 概念说明
Yearning 的 SQL 审核组织层级为:数据源(source)> 库(database)> 表(table)> SQL 工单(order)> 审核流程(audit)。
提交一条 SQL 变更需先经
yearning_sql_check检测,再用yearning_submit_order提单;工单按配置的审核流流转,审核人用yearning_audit_order放行/驳回。线上查询走
yearning_run_query(仅 SELECT),需具备查询权限;部分环境开启查询审核后,查询也需先yearning_submit_query_order申请。工单状态:0 已驳回 / 1 已同意待执行 / 2 待审核 / 3 已完成 / 4 已终止 / 5 执行中 / 6 已撤回。
只读模式
设置 YEARNING_READ_ONLY=true 可排除全部写工具,仅允许查询,适合生产环境使用:
{
"env": {
"YEARNING_READ_ONLY": "true"
}
}TLS 证书验证
本服务基于 httpx2 发起 HTTPS 请求,默认会验证 TLS 证书(行为与 httpx 一致)。
在使用自签名证书或内部 CA 的环境中,HTTPS 请求会因证书校验失败而报错。此时可设置环境变量
YEARNING_INSECURE=true跳过 TLS 证书验证。该选项适用于开发、测试等使用自签名证书的环境。
{
"env": {
"YEARNING_INSECURE": "true"
}
}安全警告:禁用 TLS 证书验证是不安全的,会使得 HTTPS 连接容易受到中间人攻击。请勿在生产环境中使用,生产环境应使用受信任的 CA 签发的有效证书。
多协议传输
通过 MCP_TRANSPORT 选择传输协议:
stdio(默认):标准输入输出,适合 Claude Code、Cursor 等本地 AI 客户端集成。sse:Server-Sent Events,HTTP 传输,端点http://<host>:<port>/sse。streamable-http:Streamable HTTP,端点http://<host>:<port>/mcp。
以 streamable-http 启动示例:
MCP_TRANSPORT=streamable-http \
MCP_HOST=0.0.0.0 MCP_PORT=8080 \
MCP_AUTH_TOKEN=your-strong-token \
mcp-yearning接口认证
设置 MCP_AUTH_TOKEN 后,所有 HTTP 请求必须携带正确 Token,否则返回 401:
Authorization: Bearer <MCP_AUTH_TOKEN>也兼容 X-Auth-Token / X-MCP-Token 请求头。健康检查端点 GET /health 免鉴权,返回 {"status":"ok"},用于容器探活。
stdio传输为本地进程通信,不涉及网络,无需也不会进行 Token 认证。未设置MCP_AUTH_TOKEN时 HTTP 接口不鉴权,生产环境请务必配置。注意区分两类凭证:
MCP_AUTH_TOKEN保护本 MCP Server 的 HTTP 接口;YEARNING_USERNAME/YEARNING_PASSWORD用于登录 Yearning,两者互不相关。
MCP Resources
本服务以 MCP 2.0 Resources 暴露只读元数据,客户端可直接通过 URI 读取,无需调用工具:
Resource URI | 说明 |
| 当前登录用户信息(含可查询数据源) |
| 数据源列表 |
Resources 仅暴露只读数据,不涉及任何写操作。
Stateless HTTP 模式
设置 MCP_STATELESS_HTTP=true 可启用无状态 HTTP 模式,每次请求独立处理、不保留会话状态,适合 Serverless 平台(如 AWS Lambda、阿里云函数计算)或多副本无状态部署:
MCP_TRANSPORT=streamable-http \
MCP_STATELESS_HTTP=true \
MCP_PORT=8080 \
mcp-yearningStateless 模式下不支持流式响应(SSE stream),每个 HTTP 请求独立完成工具调用后返回。适合短时、无状态的工具调用场景。
容器化部署
本地构建(Docker)
# 构建镜像
docker build -t mcp-yearning:latest .
# 以 streamable-http 运行并启用认证
docker run -d --name mcp-yearning -p 8080:8080 \
-e MCP_TRANSPORT=streamable-http \
-e MCP_AUTH_TOKEN=your-strong-token \
-e YEARNING_URL=http://your-yearning:8000 \
-e YEARNING_USERNAME=your-user \
-e YEARNING_PASSWORD=your-password \
mcp-yearning:latestDocker Compose
复制 .env.example 为 .env 并按需修改,然后:
cp .env.example .env
docker compose up -ddocker-compose.yml 已内置 build(基于本地 Dockerfile 构建并标记为 mcp-yearning:latest)和健康检查(探测 /health),以非 root 用户运行,适合本地开发部署。
使用场景示例
配置好后,你可以这样和 AI 对话(每条示例后括注主要涉及的工具):
数据源与表结构探查
连上 Yearning,告诉我我有哪些数据源可用(yearning_user_info + yearning_list_sources)
看看 order_db 这个数据源下有哪些库,再列出 user 表有哪些字段和索引(yearning_list_databases → yearning_list_tables → yearning_table_fields)
提交并跟踪 SQL 变更
把这条建表语句在 dev 环境提个工单,先帮我做个 SQL 检测看看有没有问题:
CREATE TABLE t_demo (id INT PRIMARY KEY, name VARCHAR(64));(yearning_sql_check → yearning_submit_order)
我刚提的工单到哪一步了?把审核时间线和当前步骤给我(yearning_my_orders → yearning_order_timeline)
这个工单如果执行出错,回滚 SQL 是什么(yearning_rollback_sql)
审核人视角
列出待我审核的工单(yearning_audit_orders)
工单 ORD-2026-0001 没问题,帮我通过(yearning_audit_order,tp=agree)
线上只读查询
在 order_db 的 user 库里查一下最近 7 天注册的账号,前 100 条(yearning_run_query)
这个环境的查询为什么被拦了?看看查询审核开关和我的查询工单状态(yearning_query_status)
协作与审计
把 ORD-2026-0001 这个工单的评论都拉出来看看(yearning_order_comments)
在 ORD-2026-0001 工单下留言:已确认索引已存在,可放行(yearning_post_comment)
审核 / 撤回等危险操作需明确动作参数;
yearning_audit_order(agree)会批准变更在生产数据源执行,请确认无误后再调用。管理端(admin)能力与 AI 辅助工具为后续 Phase,未包含在本期。
已知限制
以下为当前实现与 Yearning 接口交互中的已知边界,使用前请留意:
WebSocket 工具共 4 个:
yearning_my_orders、yearning_audit_orders、yearning_order_comments(JSON)与yearning_run_query(msgpack)。它们依赖将裸 JWT 放入Sec-WebSocket-Protocol头完成鉴权;若 Yearning 前置了不透传该请求头、或会校验 subprotocol 合法性的反向代理 / 网关,WebSocket 鉴权会失败。直连 Yearning 不受影响。每次调用新建一条 WebSocket 连接,无复用:列表类接口被高频调用时存在握手开销(TCP + WS + JWT 解析每回重来)。功能无误,但高并发场景延迟偏高。
查询审核开启时
yearning_run_query需先审批:若 Yearning 开启了查询审核(数据源需先有status=2的已批准查询工单),未审批前执行查询不会返回结果;本服务会识别该情况并明确提示「请先经yearning_submit_query_order提交查询申请并审批」,而非返回空结果误导。权限 / token 类失败已转译为友好错误:无对应数据源权限、token 失效、查询审核未批准、或传入参数不合法时,Yearning 会不回帧直接关闭连接。本服务的 WebSocket 封装已增加接收超时,并把底层连接中断转成
YearningApiError(说明可能原因),不再向调用方抛出底层栈信息。yearning_run_query请求字段与 Yearning 结构体绑定:查询请求以 msgpack 编码,键名(type/sql/schema)对应 YearningQueryDeal.Ref的 Go 字段;若 Yearning 改动了该结构体或引入 msgpack tag,需同步更新clients/ws.py的打包逻辑。yearning_sql_check仅接受 DDL / DML:Yearning 的检测接口会拒绝 SELECT 等非工单 SQL(返回「请提交DML语句」)。这是平台设计而非缺陷——SELECT 不走工单流程,请直接使用yearning_run_query。登录类型仅支持
general/ldap:受 Yearning 平台限制,OIDC 等第三方 SSO 为浏览器跳转流程,无头客户端无法用账号密码完成,当前未实现(详见配置说明)。部分只读接口使用
GET+ JSON body:Yearning 的/fetch/*等接口(对应yearning_list_*、yearning_order_detail等工具)通过GET请求携带 JSON body 传参(服务端c.Bind只读 body,不读 query string)。这不符合常见 HTTP 语义,若前置的反向代理 / 网关 / CDN 会丢弃 GET 请求的 body,这些工具会静默返回空结果(信封仍为code==1200)。透传 body 的代理(如默认配置的 Nginx)不受影响,已在真实部署环境实测正常;如遇列表恒为空,请优先排查代理是否吞掉了 GET body。
开发
pip install -e ".[dev]"
pytest # respx mock 测试,无需真实 Yearning 环境
ruff check src tests实现注记
列表类接口(我的工单、审核列表、评论)为 WebSocket(
/common/list、/audit/order/list、/fetch/comment),客户端封装为「连接→发一帧→收一帧→关闭」的伪 REST查询执行(
/query/results)走 WebSocket 且用 msgpack 编解码:请求为msgpack.packb({"type": 0, "sql": sql, "schema": schema}),响应含results/query_time/error/status等HTTP 请求统一
Authorization: Bearer <JWT>;WebSocket 将 JWT 放入Sec-WebSocket-Protocol(裸 token,无 Bearer 前缀)响应信封恒为 HTTP 200,结构
{payload, code, text};成功code==1200,非 1200 视为业务错误;未知tp返回裸字符串"Illegal"
License
MIT
Available Tools
14 toolsyearning_audit_ordersARead-onlyIdempotent
分页列出与当前用户相关的待审核/审核工单(审核人视角)。
对应 API:WS /api/v2/audit/order/list
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| text | No | 按说明/工单号模糊搜索 | |
| status | No | 状态过滤:2 待审核/3 已完成/0 已驳回 | |
| work_id | No | 按工单号过滤 | |
| page_size | No | ||
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive, idempotent behavior. The description adds useful scoping (current user related, reviewer perspective) and pagination, but does not disclose additional behaviors such as default status filtering or response format implications. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the purpose with scope and perspective, the second provides the API reference. No wasted words, front-loaded with the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations and output schema, the description is largely complete: it specifies the resource, scoping, and API. However, it could explicitly mention the status filter options or contrast with 'yearning_my_orders' to aid selection, though this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with text, status, and work_id documented in the schema. The description does not elaborate on any parameters, only implying pagination through '分页' and giving the API endpoint. It does not compensate for the undocumented page, page_size, or response_format parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists pending/reviewed orders for the current user as a reviewer, with a specific API endpoint. It distinguishes from sibling tools like 'yearning_my_orders' by the '审核人视角' (reviewer perspective) scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (reviewer perspective) but does not explicitly state when to use it vs. alternatives like 'yearning_my_orders' or mention any exclusion criteria. The context is provided through the phrase '审核人视角' but no direct comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_list_databasesARead-onlyIdempotent
列出指定数据源下的数据库(库)列表。
对应 API:GET /api/v2/fetch/base
| Name | Required | Description | Default |
|---|---|---|---|
| hide | No | 是否隐藏排除库列表 | |
| source_id | Yes | 数据源 ID(来自 yearning_list_sources) | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| databases | No | 数据库名列表 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only the API endpoint, which is not a behavioral trait, and does not reveal any additional context such as filtering, pagination, or output details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two brief sentences that front-load the purpose and provide the API mapping. It contains no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool, the description combined with annotations and schema is sufficient to select and invoke it. The output schema exists, and although the description does not mention the 'hide' option, the schema describes it, so the overall package is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain any parameters; the schema covers two of three parameters with descriptions, but the response_format parameter lacks definition. The tool description provides no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists databases under a specified data source using the verb '列出' and the resource '数据库(库)'. This distinguishes it from sibling tools like list_sources and list_tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one needs to list databases for a given data source, but it does not explicitly contrast with alternatives or state when not to use it. The user must infer the context from the tool's name and sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_list_sourcesARead-onlyIdempotent
列出当前账号有权限的数据源(可按 query/dml/ddl 维度过滤)。
对应 API:GET /api/v2/fetch/source
| Name | Required | Description | Default |
|---|---|---|---|
| tp | No | 数据源范围:all/query/dml/ddl/idc | all |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | No | 数据源列表 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds the scope of current account permissions and the underlying API endpoint, which is useful context. However, it does not disclose additional behavioral traits like pagination or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main purpose and a useful API reference. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with an output schema and annotations covering safety. The description adequately covers the operation and scope; it doesn't need to explain return values given the output schema. Minor omission: doesn't mention all filter values (all/idc) but those are in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'tp' parameter with enum values and default. The description restates the filter dimensions but adds no new meaning for 'response_format', which lacks a description. With 50% schema coverage, the description does not adequately compensate for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists data sources accessible to the current account, with optional filtering by query/dml/ddl dimensions. The verb 'list' and resource 'data sources' are specific, and it distinguishes itself from sibling tools like list_databases and list_tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: lists data sources the current account has permission to, and mentions the filter dimension. Does not explicitly exclude alternatives or name when not to use, but the purpose is clear enough given the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_list_tablesARead-onlyIdempotent
列出指定数据源、指定库下的数据表列表。
对应 API:GET /api/v2/fetch/table
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes | 库名 | |
| source_id | Yes | 数据源 ID | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| tables | No | 表名列表 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only the API endpoint (GET /api/v2/fetch/table), which provides minor context but no extra behavioral detail beyond what annotations indicate. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences. The main purpose is front-loaded, and the API reference is a useful addition. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, strong annotations (readOnly, idempotent, non-destructive), and the presence of an output schema, the description is largely complete. It could mention potential pagination or output format details, but these are not essential for a list operation and the output schema likely covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'specified data source, specified database' which maps to source_id and database, but this largely repeats the schema descriptions ('数据源 ID', '库名'). The response_format parameter is not mentioned. Schema coverage is 67%, and the description adds minimal extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: '列出指定数据源、指定库下的数据表列表' (list tables under a specified data source and database). This specific verb+resource+scope distinguishes it from siblings like yearning_list_databases (which lists databases) and yearning_table_fields (which gets fields of a table).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool vs alternatives or mention exclusions. However, the purpose is clear enough that an agent can infer it should be used when needing a table list for a given source and database. No explicit 'when not to use' guidance is provided, so it relies on implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_my_ordersARead-onlyIdempotent
分页列出当前用户提交的工单(支持状态/关键字/工单号过滤)。
对应 API:WS /api/v2/common/list
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 页码(从 1 开始) | |
| text | No | 按说明/工单号模糊搜索 | |
| status | No | 状态过滤:8=全部(默认)/ 2=待审核 / 3=已完成 / 0=已驳回 / 4=已终止 / 6=已撤回 / 1=已同意待执行 / 5=执行中 | |
| work_id | No | 按工单号过滤 | |
| page_size | No | 分页大小 | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the API endpoint and filter capabilities, but does not disclose additional behavioral traits like pagination behavior or return format. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences that clearly state the purpose and supported filters, plus the API reference. Every word earns its place, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, annotations, and output schema, the description is mostly complete. It covers the core purpose, filters, pagination, and API. The only minor gap is that it does not explicitly mention response format or default sort order, but these are not critical given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so the schema already documents most parameters. The description adds semantic grouping by mentioning status/keyword/work_id filtering, which aligns with the schema but does not provide new details beyond what the parameter descriptions already contain. It does not compensate for the few undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists work orders submitted by the current user, with a specific verb '列出' and resource '当前用户提交的工单'. It also mentions supported filters (status/keyword/work_id), which distinguishes it from sibling tools like order_detail or audit_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing the current user's own submitted orders, which is a clear context. However, it does not explicitly name alternative tools or state when not to use this tool, so it falls short of a 5 but is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_order_commentsBRead-onlyIdempotent
读取指定工单的全部评论。
对应 API:WS /api/v2/fetch/comment
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | 工单号 | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, covering the safety profile. The description adds the scope ('全部评论') and API endpoint, but does not disclose ordering, pagination, or other behaviors. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the primary purpose and an API reference. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and annotations plus output schema handle some context. However, the description lacks usage guidelines and response_format semantics, which is noticeable given the tool's context among 14 siblings. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; work_id is described in the schema ('工单号'), but response_format is undocumented in both schema and description. The description text adds no parameter semantics, failing to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads all comments for a specified work order, using a specific verb ('读取') and resource ('指定工单的全部评论'). It also references the exact API. However, it does not explicitly differentiate from sibling tools like yearning_order_detail or yearning_order_timeline, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description offers only the core function and API reference, with no mention of prerequisites, scenarios, or exclusions. Given the large sibling set, this is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_order_detailARead-onlyIdempotent
查看工单详情:SQL 明细(分页)、完整 SQL 语句、执行结果记录。
对应 API:GET /api/v2/fetch/detail + GET /api/v2/fetch/sql
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| work_id | Yes | 工单号 | |
| page_size | No | ||
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context by specifying that it retrieves paginated SQL details, complete SQL statements, and execution result records, and that it corresponds to two GET endpoints. This goes beyond what annotations provide, though it does not disclose rate limits or merge logic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the primary purpose. Every clause provides relevant information, and there is no redundant or filler content. It is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a read-only detail query with an output schema provided, so the description does not need to explain return values in depth. It covers the main content returned and the pagination behavior, which is sufficient for basic invocation. It could optionally mention the response_format parameter, but the schema already defines its default and enum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only work_id has a description). The description mentions pagination, which gives meaning to page and page_size, but it does not explain the response_format parameter or how it affects the output. Since coverage is low, the description partially compensates but leaves gaps for some parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with '查看工单详情' (view work order details) and enumerates the specific content: SQL details (paginated), full SQL statements, and execution result records. This is a specific verb+resource combination that clearly distinguishes it from sibling tools like 'yearning_my_orders' (list orders) and 'yearning_order_timeline' (view timeline). It also maps to two concrete API endpoints, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need detailed SQL and execution results for a specific work order. However, it does not explicitly mention alternatives or say when not to use it. The context is clear enough for an agent to infer the primary use case, but there is no direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_order_timelineARead-onlyIdempotent
查看工单审核时间线与流程步骤(含各审核人动作与当前所处步骤)。
对应 API:GET /api/v2/fetch/timeline + GET /api/v2/fetch/steps
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | 工单号 | |
| source_id | No | 数据源 ID(影响流程步骤解析) | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context by specifying the underlying API endpoints (GET) and the content included (reviewer actions, current step), which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and followed by the API reference. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only timeline tool with strong annotations and an output schema, the description covers the core behavior and API mapping. It lacks usage scenarios or prerequisites, but these are not critical given the simple read-only nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with work_id and source_id having Chinese descriptions. The description does not add parameter-level details beyond what the schema provides, but the schema already covers the key parameters, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it views the work order audit timeline and process steps, including each reviewer's actions and current step. This specific verb+resource combination distinguishes it from sibling tools like order detail, query status, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for viewing timelines and steps, but does not explicitly say when to use it versus alternatives or provide exclusion criteria. It is reasonably clear but lacks direct guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_query_statusARead-onlyIdempotent
查看查询审核开关是否开启,以及当前用户的查询工单状态。
对应 API:GET /api/v2/fetch/is_query + GET /api/v2/fetch/query_status
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds behavior beyond annotations: it reveals that the tool invokes two separate GET endpoints (is_query and query_status), implying combined functionality. It also specifies that it operates on the current user's data, which is not indicated in annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences, with the first stating purpose and the second listing API endpoints. Every word is purposeful, no redundancy or filler. It is front-loaded with the key information and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, strong annotations, and presence of an output schema, the description provides adequate context: it names the two checks and corresponding APIs. It does not explain return values, but that is covered by the output schema. It could benefit from a usage note (e.g., 'use before running a query'), but that is covered under usage guidelines. Overall, it is reasonably complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single optional parameter response_format, and the description does not mention this parameter at all. Since coverage is low, the description should compensate by explaining the parameter or its behavior, but it fails to do so. The enum values (markdown/json) are self-explanatory, but the lack of any description or context leaves the agent without guidance on when to choose each format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool checks whether the query audit switch is enabled and the current user's query order status, which is a specific verb+resource+scope. It clearly distinguishes from sibling tools like yearning_my_orders (lists orders) and yearning_run_query (runs queries). The mention of specific API endpoints further solidifies its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that it should be used before running queries, nor does it reference sibling tools for different scenarios. Usage is only implied by the tool's function, lacking clear context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_rollback_sqlARead-onlyIdempotent
获取工单的回滚 SQL(执行前由系统生成,用于误操作回退)。
对应 API:GET /api/v2/fetch/roll
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | 工单号 | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context—that the SQL is generated before execution—but does not disclose additional traits such as whether rollback SQL may be unavailable or any permission requirements. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loading the primary purpose and immediately providing the corresponding API. Every sentence earns its place, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with rich annotations and an output schema, the description is largely complete. It covers purpose, generation timing, and API mapping. Minor gaps exist, such as not mentioning potential absence of rollback SQL, but overall it is sufficient for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes work_id as '工单号' and response_format with enum/default values. The description does not add parameter-level details beyond echoing the work order concept. At 50% schema coverage, the description is not required to fully compensate, but it also adds minimal parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving rollback SQL for a work order (获取工单的回滚 SQL). It uses a specific verb and resource, and the context '用于误操作回退' distinguishes it from sibling tools like run_query or sql_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: to fetch rollback SQL that was generated by the system before execution, for reverting accidental operations. It does not explicitly name alternatives or exclusions, but the use case is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_run_queryARead-onlyIdempotent
在指定数据源执行只读 SELECT 查询并返回结果表格。
注意:本工具仅执行 SELECT,对目标库数据无修改;但 Yearning 会留存查询审计记录, 且查询本身可能产生资源开销(如全表扫描、锁竞争),属「提交操作」而非纯被动读取。 需具备查询权限且已通过查询审核。
对应 API:WS /api/v2/query/results(msgpack 编解码)
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | 查询 SQL(仅 SELECT,不修改目标库数据) | |
| limit | No | 返回行数上限(客户端截断) | |
| schema | Yes | 库名 | |
| source_id | Yes | 数据源 ID | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds significant behavioral context: it only executes SELECT with no data modification, but it retains audit records and may cause resource overhead like full-table scans and lock contention, making it a 'submit operation' rather than a purely passive read. This enriches the annotation info without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is stated in a single, focused sentence. The additional note and API reference are structured and useful, though the API endpoint detail is slightly beyond core usage guidance. Overall, it is concise and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, constraints, permissions, and side effects. The output schema handles return format details, so missing return value descriptions are not a gap. It could be slightly more complete by mentioning error scenarios, but it is adequate for a query execution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so parameters are already well-documented. The description reinforces that SQL is read-only, but does not add new parameter-level details beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes a read-only SELECT query and returns a result table. It uses specific verb+resource (execute query on specified data source) and distinguishes from sibling tools like sql_check and audit_orders, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it requires query permissions and must pass query review, and it explicitly notes this is a 'submit operation' with audit and resource overhead. It does not explicitly list alternative tools, but it gives enough context for an agent to understand when this tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_sql_checkARead-onlyIdempotent
提交前对 SQL 做审核检测,返回逐条检查结果(级别/影响行数/错误/执行耗时)。
建议先调用本工具确认无误,再调用 yearning_submit_order 提交工单。 对应 API:PUT /api/v2/fetch/test
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | 待检测的 SQL | |
| database | Yes | 库名 | |
| source_id | Yes | 数据源 ID | |
| order_type | Yes | SQL 类型:ddl / dml | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds behavioral context by detailing return values (check results with level/affected rows/errors/execution time) and the API endpoint (PUT /api/v2/fetch/test), which goes beyond the structured annotations. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first sentence states purpose and output, second provides usage recommendation and API. It is front-loaded, concise, and every sentence contributes useful information. No waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers purpose, usage, output characteristics, and API endpoint. An output schema exists, so return details needn't be fully explained. The description is sufficient for an agent to select and invoke this tool correctly, though it could optionally mention any limitations or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% with descriptions for sql, database, source_id, and order_type. The description does not add parameter-specific semantics beyond that; it only mentions "逐条检查结果" (per-item results), which relates to output, not parameters. With high schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a pre-submission SQL audit check ("提交前对 SQL 做审核检测") and specifies the output includes per-item results (level/affected rows/errors/execution time). This distinguishes it from sibling tools like yearning_run_query, which likely executes queries rather than validating them. The reference to yearning_submit_order further clarifies its role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends calling this tool before yearning_submit_order ("建议先调用本工具确认无误,再调用 yearning_submit_order 提交工单"), providing clear when-to-use guidance. It lacks explicit when-not-to-use or alternative tool mentions, but the workflow context is strong enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_table_fieldsARead-onlyIdempotent
查看表结构:字段列表(类型/可空/键/默认值/注释)与索引信息。
对应 API:GET /api/v2/fetch/fields
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | 表名 | |
| database | Yes | 库名 | |
| source_id | Yes | 数据源 ID | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, providing the safety profile. The description adds value by specifying the exact return content (field attributes and index info) and the underlying API endpoint, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose, and includes a useful API reference without any wasted words. It is well-structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only introspection tool, the description covers the main functionality and return value. It lacks explicit error scenarios, authorization requirements, or interaction with other tools, but these are not critical given the annotations and schema. The presence of an output schema (response_format) further reduces the need to detail return formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (3 of 4 parameters described), so the schema already handles most parameter semantics. The tool description does not add any extra meaning to the parameters, such as how to find or format source_id, database, or table. Thus the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: viewing table structure, specifically field lists with type, nullable, key, default, comment, and index information. This distinguishes it from sibling tools like yearning_list_tables, which list tables rather than their fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the description (inspect table schema when needed), but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The context signals and sibling names suggest differentiation, but the description itself does not spell it out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yearning_user_infoARead-onlyIdempotent
查看当前登录用户的信息、部门、邮箱,以及有权查询的数据源列表。
对应 API:GET /api/v2/fetch/userinfo
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | No | 用户信息(已脱敏,移除密码等敏感字段) |
| sources | No | 可查询数据源列表 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds value by specifying the exact payload (user info, department, email, authorized data sources) and the underlying API endpoint, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences that front-load the purpose and end with the API endpoint. Every word earns its place, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only lookup with strong annotations and an output schema; the description covers what is returned and the endpoint. Given the low complexity and available structured metadata, the description is complete enough for the AI 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter response_format is not mentioned in the description, and schema description coverage is 0%. The schema's enum values (markdown/json) and default provide some semantic clarity, but the description adds no parameter-level guidance and fails to compensate for the missing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb '查看' (view) and names exact resources: current logged-in user's information, department, email, and authorized data source list. This clearly differentiates it from sibling tools that list databases, tables, orders, or run queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, but the description clearly implies the natural use case of retrieving one's own user profile and permissions. It does not mention alternatives or exclusions, so it is minimally viable.
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.
19 tool updates
v0.3.0- Removed
yearning_audit_order - Changed
yearning_audit_orders9 fields changed- removed
Input schema / $defs / AuditOrdersInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "page": { - "default": 1, - "minimum": 1, - "title": "Page", - "type": "integer" - }, - "page_size": { - "default": 10, - "maximum": 100, - "minimum": 1, - "title": "Page Size", - "type": "integer" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "状态过滤:2 待审核/3 已完成/0 已驳回", - "title": "Status" - }, - "text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "按说明/工单号模糊搜索", - "title": "Text" - }, - "work_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "按工单号过滤", - "title": "Work Id" - } - }, - "title": "AuditOrdersInput", - "type": "object" -} - added
Input schema / properties / pageAdded value: +{ + "default": 1, + "minimum": 1, + "title": "Page", + "type": "integer" +} - added
Input schema / properties / page_sizeAdded value: +{ + "default": 10, + "maximum": 100, + "minimum": 1, + "title": "Page Size", + "type": "integer" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/AuditOrdersInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / statusAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "状态过滤:2 待审核/3 已完成/0 已驳回", + "title": "Status" +} - added
Input schema / properties / textAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "按说明/工单号模糊搜索", + "title": "Text" +} - added
Input schema / properties / work_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "按工单号过滤", + "title": "Work Id" +} - removed
Input schema / requiredRemoved value: -[ - "params" -]
- Changed
yearning_list_databases11 fields changed- removed
Input schema / $defs / ListDatabasesInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "hide": { - "default": false, - "description": "是否隐藏排除库列表", - "title": "Hide", - "type": "boolean" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "source_id": { - "description": "数据源 ID(来自 yearning_list_sources)", - "title": "Source Id", - "type": "string" - } - }, - "required": [ - "source_id" - ], - "title": "ListDatabasesInput", - "type": "object" -} - added
Input schema / properties / hideAdded value: +{ + "default": false, + "description": "是否隐藏排除库列表", + "title": "Hide", + "type": "boolean" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/ListDatabasesInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / source_idAdded value: +{ + "description": "数据源 ID(来自 yearning_list_sources)", + "title": "Source Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "source_id" +] - added
Output schema / descriptionAdded value: +"yearning_list_databases 的结构化输出模型。" - added
Output schema / properties / databasesAdded value: +{ + "description": "数据库名列表", + "items": { + "type": "string" + }, + "title": "Databases", + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "title": "Result", - "type": "string" -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"yearning_list_databasesOutput"New value: +"ListDatabasesOutput"
- Changed
yearning_list_sources10 fields changed- removed
Input schema / $defs / ListSourcesInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "tp": { - "$ref": "#/$defs/SourceType", - "default": "all", - "description": "数据源范围:all/query/dml/ddl/idc" - } - }, - "title": "ListSourcesInput", - "type": "object" -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/ListSourcesInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / tpAdded value: +{ + "$ref": "#/$defs/SourceType", + "default": "all", + "description": "数据源范围:all/query/dml/ddl/idc" +} - removed
Input schema / requiredRemoved value: -[ - "params" -] - added
Output schema / descriptionAdded value: +"yearning_list_sources 的结构化输出模型。" - removed
Output schema / properties / resultRemoved value: -{ - "title": "Result", - "type": "string" -} - added
Output schema / properties / sourcesAdded value: +{ + "description": "数据源列表", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Sources", + "type": "array" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"yearning_list_sourcesOutput"New value: +"ListSourcesOutput"
- Changed
yearning_list_tables11 fields changed- removed
Input schema / $defs / ListTablesInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "database": { - "description": "库名", - "title": "Database", - "type": "string" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "source_id": { - "description": "数据源 ID", - "title": "Source Id", - "type": "string" - } - }, - "required": [ - "source_id", - "database" - ], - "title": "ListTablesInput", - "type": "object" -} - added
Input schema / properties / databaseAdded value: +{ + "description": "库名", + "title": "Database", + "type": "string" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/ListTablesInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / source_idAdded value: +{ + "description": "数据源 ID", + "title": "Source Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "source_id", + "database" +] - added
Output schema / descriptionAdded value: +"yearning_list_tables 的结构化输出模型。" - removed
Output schema / properties / resultRemoved value: -{ - "title": "Result", - "type": "string" -} - added
Output schema / properties / tablesAdded value: +{ + "description": "表名列表", + "items": { + "type": "string" + }, + "title": "Tables", + "type": "array" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"yearning_list_tablesOutput"New value: +"ListTablesOutput"
- Changed
yearning_my_orders9 fields changed- removed
Input schema / $defs / MyOrdersInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "page": { - "default": 1, - "description": "页码(从 1 开始)", - "minimum": 1, - "title": "Page", - "type": "integer" - }, - "page_size": { - "default": 10, - "description": "分页大小", - "maximum": 100, - "minimum": 1, - "title": "Page Size", - "type": "integer" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "status": { - "default": 8, - "description": "状态过滤:8=全部(默认)/ 2=待审核 / 3=已完成 / 0=已驳回 / 4=已终止 / 6=已撤回 / 1=已同意待执行 / 5=执行中", - "title": "Status", - "type": "integer" - }, - "text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "按说明/工单号模糊搜索", - "title": "Text" - }, - "work_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "按工单号过滤", - "title": "Work Id" - } - }, - "title": "MyOrdersInput", - "type": "object" -} - added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "页码(从 1 开始)", + "minimum": 1, + "title": "Page", + "type": "integer" +} - added
Input schema / properties / page_sizeAdded value: +{ + "default": 10, + "description": "分页大小", + "maximum": 100, + "minimum": 1, + "title": "Page Size", + "type": "integer" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/MyOrdersInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / statusAdded value: +{ + "default": 8, + "description": "状态过滤:8=全部(默认)/ 2=待审核 / 3=已完成 / 0=已驳回 / 4=已终止 / 6=已撤回 / 1=已同意待执行 / 5=执行中", + "title": "Status", + "type": "integer" +} - added
Input schema / properties / textAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "按说明/工单号模糊搜索", + "title": "Text" +} - added
Input schema / properties / work_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "按工单号过滤", + "title": "Work Id" +} - removed
Input schema / requiredRemoved value: -[ - "params" -]
- Changed
yearning_order_comments5 fields changed- removed
Input schema / $defs / OrderCommentsInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "work_id": { - "description": "工单号", - "title": "Work Id", - "type": "string" - } - }, - "required": [ - "work_id" - ], - "title": "OrderCommentsInput", - "type": "object" -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/OrderCommentsInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / work_idAdded value: +{ + "description": "工单号", + "title": "Work Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "work_id" +]
- Changed
yearning_order_detail7 fields changed- removed
Input schema / $defs / OrderDetailInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "page": { - "default": 1, - "minimum": 1, - "title": "Page", - "type": "integer" - }, - "page_size": { - "default": 10, - "maximum": 100, - "minimum": 1, - "title": "Page Size", - "type": "integer" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "work_id": { - "description": "工单号", - "title": "Work Id", - "type": "string" - } - }, - "required": [ - "work_id" - ], - "title": "OrderDetailInput", - "type": "object" -} - added
Input schema / properties / pageAdded value: +{ + "default": 1, + "minimum": 1, + "title": "Page", + "type": "integer" +} - added
Input schema / properties / page_sizeAdded value: +{ + "default": 10, + "maximum": 100, + "minimum": 1, + "title": "Page Size", + "type": "integer" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/OrderDetailInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / work_idAdded value: +{ + "description": "工单号", + "title": "Work Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "work_id" +]
- Changed
yearning_order_timeline6 fields changed- removed
Input schema / $defs / OrderTimelineInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "source_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "数据源 ID(影响流程步骤解析)", - "title": "Source Id" - }, - "work_id": { - "description": "工单号", - "title": "Work Id", - "type": "string" - } - }, - "required": [ - "work_id" - ], - "title": "OrderTimelineInput", - "type": "object" -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/OrderTimelineInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / source_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "数据源 ID(影响流程步骤解析)", + "title": "Source Id" +} - added
Input schema / properties / work_idAdded value: +{ + "description": "工单号", + "title": "Work Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "work_id" +]
- Removed
yearning_post_comment - Changed
yearning_query_status4 fields changed- removed
Input schema / $defs / QueryStatusInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - } - }, - "title": "QueryStatusInput", - "type": "object" -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/QueryStatusInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - removed
Input schema / requiredRemoved value: -[ - "params" -]
- Changed
yearning_rollback_sql5 fields changed- removed
Input schema / $defs / RollbackSqlInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "work_id": { - "description": "工单号", - "title": "Work Id", - "type": "string" - } - }, - "required": [ - "work_id" - ], - "title": "RollbackSqlInput", - "type": "object" -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/RollbackSqlInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / work_idAdded value: +{ + "description": "工单号", + "title": "Work Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "work_id" +]
- Changed
yearning_run_query8 fields changed- removed
Input schema / $defs / RunQueryInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "limit": { - "default": 100, - "description": "返回行数上限(客户端截断)", - "maximum": 1000, - "minimum": 1, - "title": "Limit", - "type": "integer" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "schema": { - "description": "库名", - "title": "Schema", - "type": "string" - }, - "source_id": { - "description": "数据源 ID", - "title": "Source Id", - "type": "string" - }, - "sql": { - "description": "查询 SQL(仅 SELECT,不修改目标库数据)", - "title": "Sql", - "type": "string" - } - }, - "required": [ - "source_id", - "schema", - "sql" - ], - "title": "RunQueryInput", - "type": "object" -} - added
Input schema / properties / limitAdded value: +{ + "default": 100, + "description": "返回行数上限(客户端截断)", + "maximum": 1000, + "minimum": 1, + "title": "Limit", + "type": "integer" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/RunQueryInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / schemaAdded value: +{ + "description": "库名", + "title": "Schema", + "type": "string" +} - added
Input schema / properties / source_idAdded value: +{ + "description": "数据源 ID", + "title": "Source Id", + "type": "string" +} - added
Input schema / properties / sqlAdded value: +{ + "description": "查询 SQL(仅 SELECT,不修改目标库数据)", + "title": "Sql", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "source_id", + "schema", + "sql" +]
- Changed
yearning_sql_check8 fields changed- removed
Input schema / $defs / SqlCheckInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "database": { - "description": "库名", - "title": "Database", - "type": "string" - }, - "order_type": { - "$ref": "#/$defs/OrderType", - "description": "SQL 类型:ddl / dml" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "source_id": { - "description": "数据源 ID", - "title": "Source Id", - "type": "string" - }, - "sql": { - "description": "待检测的 SQL", - "title": "Sql", - "type": "string" - } - }, - "required": [ - "source_id", - "database", - "sql", - "order_type" - ], - "title": "SqlCheckInput", - "type": "object" -} - added
Input schema / properties / databaseAdded value: +{ + "description": "库名", + "title": "Database", + "type": "string" +} - added
Input schema / properties / order_typeAdded value: +{ + "$ref": "#/$defs/OrderType", + "description": "SQL 类型:ddl / dml" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/SqlCheckInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / source_idAdded value: +{ + "description": "数据源 ID", + "title": "Source Id", + "type": "string" +} - added
Input schema / properties / sqlAdded value: +{ + "description": "待检测的 SQL", + "title": "Sql", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "source_id", + "database", + "sql", + "order_type" +]
- Removed
yearning_submit_order - Removed
yearning_submit_query_order - Changed
yearning_table_fields7 fields changed- removed
Input schema / $defs / TableFieldsInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "database": { - "description": "库名", - "title": "Database", - "type": "string" - }, - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - }, - "source_id": { - "description": "数据源 ID", - "title": "Source Id", - "type": "string" - }, - "table": { - "description": "表名", - "title": "Table", - "type": "string" - } - }, - "required": [ - "source_id", - "database", - "table" - ], - "title": "TableFieldsInput", - "type": "object" -} - added
Input schema / properties / databaseAdded value: +{ + "description": "库名", + "title": "Database", + "type": "string" +} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/TableFieldsInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - added
Input schema / properties / source_idAdded value: +{ + "description": "数据源 ID", + "title": "Source Id", + "type": "string" +} - added
Input schema / properties / tableAdded value: +{ + "description": "表名", + "title": "Table", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "params" -]New value: +[ + "source_id", + "database", + "table" +]
- Removed
yearning_undo_order - Changed
yearning_user_info10 fields changed- removed
Input schema / $defs / UserInfoInputRemoved value: -{ - "additionalProperties": false, - "properties": { - "response_format": { - "$ref": "#/$defs/ResponseFormat", - "default": "markdown" - } - }, - "title": "UserInfoInput", - "type": "object" -} - removed
Input schema / properties / paramsRemoved value: -{ - "$ref": "#/$defs/UserInfoInput" -} - added
Input schema / properties / response_formatAdded value: +{ + "$ref": "#/$defs/ResponseFormat", + "default": "markdown" +} - removed
Input schema / requiredRemoved value: -[ - "params" -] - added
Output schema / descriptionAdded value: +"yearning_user_info 的结构化输出模型。" - removed
Output schema / properties / resultRemoved value: -{ - "title": "Result", - "type": "string" -} - added
Output schema / properties / sourcesAdded value: +{ + "description": "可查询数据源列表", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Sources", + "type": "array" +} - added
Output schema / properties / userAdded value: +{ + "additionalProperties": true, + "description": "用户信息(已脱敏,移除密码等敏感字段)", + "title": "User", + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"yearning_user_infoOutput"New value: +"UserInfoOutput"
19 tool updates
v0.1.0- First observed
yearning_audit_order - First observed
yearning_audit_orders - First observed
yearning_list_databases - First observed
yearning_list_sources - First observed
yearning_list_tables - First observed
yearning_my_orders - First observed
yearning_order_comments - First observed
yearning_order_detail - First observed
yearning_order_timeline - First observed
yearning_post_comment - First observed
yearning_query_status - First observed
yearning_rollback_sql - First observed
yearning_run_query - First observed
yearning_sql_check - First observed
yearning_submit_order - First observed
yearning_submit_query_order - First observed
yearning_table_fields - First observed
yearning_undo_order - First observed
yearning_user_info
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action: user info, source listing, database/table/field metadata, SQL check, order retrieval (my orders, audit orders), order details (detail, timeline, rollback, comments), and query execution. The two order-listing tools (my_orders vs audit_orders) are clearly differentiated by user vs auditor perspective.
All tools share the 'yearning_' prefix and use snake_case. Most follow a verb_noun pattern (list_sources, list_tables, run_query) while some are noun-based (table_fields, order_detail). This is a minor deviation but overall predictable and readable.
14 tools is well within the typical range for a domain-specific server. The count matches the platform's complexity and each tool covers a distinct aspect of the SQL audit and query workflow.
The tools heavily favor read/query operations but lack critical actions. The description in yearning_sql_check references a 'submit_order' tool that is absent, so the core workflow of submitting SQL for approval is incomplete. Additionally, there is no tool for approving/rejecting orders from the auditor perspective, only listing them. This leaves significant functional gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Official Microsoft MCP Server to query Microsoft Entra data using natural language
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA MySQL MCP server for secure database interaction, enabling schema inspection, query execution, and RBAC via AI coding assistants.6045MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that connects AI agents to MySQL databases for schema exploration, data querying, and SQL execution via natural language.2MIT
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server for MySQL database integration with AI agents, enabling database exploration, CRUD operations, schema management, and performance monitoring through natural language.285MIT
- AlicenseNot gradedqualityBmaintenanceProduction-ready MCP server for MySQL databases enabling AI assistants to interact with MySQL through secure, validated, and audited tools.1MIT