Skip to main content
Glama
yangaiwu

VOD MCP Server

by yangaiwu

vod-devkit

English | 中文

VOD 用户声音采集插件(方案 A 纯采集形态):MCP server + 技能 + 声明式护栏,把 agent 产品的用户反馈安全送进 VOD。运营能力归 vod-system 前端,不在本插件。对齐 huaweicloud-devkit v2 的工程骨架(installer / MCP / skills / packs / policy),面向"服务面插件"的护栏更保守。

  • 需求/设计:docs/proposal.md、docs/design.md(VOD-PLUGIN)

  • 真源纪律:领域规则技能由 scripts/vendor_rules.py 从 VodTeam/VOD-Project 按 commitSHA 锁定拉取(规则只改一处)

  • 对账主键:引擎任务 taskId;插件来源主键=commitSHA(build-info.json 构建烧录, install-manifest.json 安装落盘,vod-devkit verify 到 origin 核对 commit)

快速使用

# 安装到 Hermes(写 MCP 配置+skills+install-manifest)
bin/vod-devkit install --target hermes --preset collect   # 对外默认(采集者)
# 双后端+双 key(网关上线后必配,否则 401):
VOD_JAVA_API_BASE / VOD_JAVA_API_KEY(唯一上游 Java)

bin/vod-devkit update   # git fetch+ff 拉取+重烧 build-info
bin/vod-devkit status   # 看 install-manifest(版本+来源+宿主+packs)
bin/vod-devkit verify   # commitSHA 到 origin 核验(篡改/改写告警)
bin/vod-devkit doctor   # 配置+skills+build-info 三查
bin/vod-devkit uninstall

# 直接以 MCP server 运行(任意 MCP 客户端可连)
python3 -m vod_mcp.server          # stdio,JSON-RPC
VOD_PACKS=core,collect python3 -m vod_mcp.server   # packs 裁剪

Related MCP server: io.github.attenlabs/hotato

工具面(契约唯一事实源:contract/tools.schema.json)

工具

类型

护栏

| vod_submit_voices | 写 | confirm 逐次同意 + 单批≤50 + source 取握手宿主身份;走 Java /external/voices | | vod_devkit_info | 只读常驻 | 返回版本/commitSHA/宿主 clientInfo | | vod_auth_status | 只读常驻 | key 指纹化自检+三步引导(无 key 可跑) | | vod_list_submitted | 只读 | 本机提交账本(cap 200)——agent 替用户对账进度 |

安全:deny 拦 DB 直连意图与凭据读取(safety/policy.json 声明式规则; 文本规则只扫结构性字段,不误杀反馈内容里的凭据引用)。

测试:20 用例(方案 A 收敛后)(单元+护栏+packs+真进程 stdio 回环+协议级真 HTTP 服务器 锁定认证头/双后端路径——E1/E2 的永久回归门)。决策闭环见 docs/decisions.md。

质量门禁

GitCode Actions 平台侧当前对本账号不可用(运行 0ms FAILED 零 job、 公开实验仓同样不触发,平台问题非代码问题,已实测隔离)。期间的机器 门禁=pre-push 钩子(pytest+pyflakes,红了禁推):

git config core.hooksPath .githooks   # clone 后执行一次

.gitcode/workflows/ci.yml 已就位,平台恢复后自动叠加服务端门禁。

测试

零第三方运行时依赖;测试需 pytest。真进程 stdio 回环覆盖握手、工具 列举、confirm 护栏、宿主感知(U1/U3/U13/U15/U16)。

Available Tools

4 tools
vod_auth_statusA

认证自检(只读,无 key 也能跑):报告双后端 key 配置态(指纹非明文)、连通性、环境指向、生效 packs。缺 key 时输出结构化引导(申请步骤)。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it declares read-only behavior, that no key is required to run, and importantly that key material is reported as a fingerprint rather than plaintext (a security-relevant disclosure). It does not describe response size or latency, but for a self-diagnostic tool the essential behavior is covered.

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?

A single dense sentence with parenthetical clarifications; every clause lists a distinct capability. It is somewhat compressed with multiple comma-separated clauses, but nothing is redundant.

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?

There is no output schema and no annotations, so the description must stand alone, and it largely does by enumerating the reported fields and the missing-key guidance output. However, it does not describe the output shape or format of those reports, leaving some ambiguity about what an agent will receive.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies; the description correctly adds no parameter noise and instead spends its words on what the tool inspects.

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

Purpose4/5

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

The description names a specific operation (self-check of authentication) and enumerates the exact things reported: dual-backend key configuration state, connectivity, environment pointing, and active packs. This is clearly differentiated from the sibling tools (submit/list voices, devkit info), though it never names them explicitly.

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?

Implies its use case by stating it is read-only and runs even without a key configured, which signals a diagnostic/troubleshooting role, and it notes that missing keys produce structured application guidance. There is no explicit when-to-use-vs-alternative routing and no stated exclusions.

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

vod_devkit_infoA

插件自述(只读,core pack 常驻):版本/commitSHA/宿主身份/安装信息。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations supplied, the description carries the burden and does so reasonably: it declares read-only behavior (no side effects) and that the tool is a permanently available core-pack member, which is important availability context. It also enumerates what comes back (version, commitSHA, host identity, install info). It doesn't describe the structure or format of that data, but no output schema exists and the content is at least named.

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?

A single compact line that front-loads the purpose and then the mode (read-only, always resident) and the returned contents. Nothing is redundant. The parenthetical phrase 'core pack 常驻' is slightly jargon-heavy for an outside agent, but it is dense with useful meaning rather than filler.

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?

This is a trivial, zero-parameter, side-effect-free introspection tool, and the description covers mode, availability, and the categories of data returned. Without an output schema it could say a bit more about the shape of 'install info', but an agent has enough to call it correctly and interpret the result.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a zero-param tool applies. The description correctly implies a parameterless self-report by framing it as the plugin's own account.

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

Purpose4/5

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

The description identifies a specific resource: the plugin's own metadata (version, commit SHA, host identity, install info), and labels it read-only. Siblings (vod_submit_voices, vod_list_submitted, vod_auth_status) are clearly different operations, so an agent can distinguish it. The verb is implicit ('自述' = it describes itself), which keeps it just 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.

Usage Guidelines3/5

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

It states the tool is read-only and always resident in the core pack, which implies the agent can call it at any time for diagnostics. However, it never says when to prefer this over vod_auth_status, or under what conditions an agent should look up version/host info at all. Usage is inferable but not instructed.

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

vod_list_submittedA

查询本机已提交的声音(只读)。本地账本(cap 200),最新在前;跨机/权威查询随引擎端点(VOD-VOI)。终端用户进度追问由 agent 凭此对账回答。

NameRequiredDescriptionDefault
limitNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful traits: read-only, bounded local ledger of 200 entries, newest-first ordering, and that it is not the authoritative source. It stops short of stating staleness/eviction consequences explicitly (that older entries fall off the cap) or the fields returned per record.

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?

Very compact and front-loaded: purpose first, then scope/ordering, then the authoritative-source caveat and use case. Dense with semicolons and an unexplained shorthand ('VOD-VOI') costs it a point, but nothing is redundant.

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?

For a one-parameter read tool the description is adequate on scope and safety, but with no output schema the agent is never told what a returned entry contains (fields, status values), which matters for the stated reconciliation use case. The parameter and return shape are the missing pieces.

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 0% and the single 'limit' parameter is never documented in the description; the only signal is '最新在前', which implies limit selects the most recent N. It does not reconcile the schema max of 100 with the stated 200-entry ledger cap or explain the default of 20, so meaning added beyond the schema is thin.

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?

States a specific verb and resource ('查询本机已提交的声音') plus an explicit read-only qualifier, and scopes it to the local ledger, which cleanly separates it from the write-side sibling vod_submit_voices. The parenthetical '(只读)' reinforces the operation type without ambiguity.

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?

Gives a clear usage context: this is the reconciliation source for answering end-user progress questions, while cross-machine/authoritative lookups are routed elsewhere ('跨机/权威查询随引擎端点'). It names the alternative path but does not spell out a hard exclusion rule or preconditions (e.g. what to do if the entry is not in the local 200-cap ledger).

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

vod_submit_voicesA

提交 agent 产品用户反馈声音(写,需确认)。对接 Java 现有 POST /external/voice/submit(提交即分析)。voiceId=调用级唯一(跨调用不去重保声量,R1);title=用户原文(R3)。缺 key 时自动获取零字段匿名令牌。

NameRequiredDescriptionDefault
voicesYes用户反馈声音列表(content 必填)
productNo反馈关于的产品。归因三层:安装绑定默认(install --product)> 本参数显式指定 > 询问用户。禁止静默猜默认(归因错误污染目标产品数据)。
confirmedNo用户已确认为 true 才执行(confirm 护栏,逐次同意)

TDQS

A3.5/5.0
Behavior4/5

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

No annotations exist here, so the description carries the full behavioral burden, and it does disclose meaningful traits: submission triggers analysis, each call creates a new voice with no cross-call deduplication (preserving voice volume), and a missing key silently falls back to a zero-field anonymous token. It does not cover failure modes, rate limits, or response shape, so it falls short of a 5.

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

Conciseness3/5

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

The description is front-loaded: the action, the write scope, and the confirmation requirement come first, which is good. However, it is compressed to the point of opacity: the internal rule tags "R1" and "R3" are cited without any referent, and the voiceId/title language refers to a data model the schema does not expose.

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?

For a 3-parameter, fully schema-documented tool with no annotations, the description covers write semantics, confirmation, side effects, and auth fallback, which is adequate. Since no output schema exists, the complete absence of any indication of what a submission returns (IDs, status, per-item errors for a batch of up to 50) is a real gap.

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 the baseline is a 3. The description reinforces the guardrail semantics of the confirmation flow and the volume-preserving deduplication behavior, but it also describes "voiceId" and "title" fields that are absent from the schema, adding confusion rather than meaning for the actual parameters (voices, product, confirmed).

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

Purpose4/5

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

The description states a concrete verb and resource ("提交 agent 产品用户反馈声音") plus the write scope and confirmation requirement, which clearly separates it from the read-only siblings vod_list_submitted and vod_auth_status. It loses a point because it goes on to describe behavior in terms of "voiceId" and "title", fields that do not exist in the input schema, leaving mild ambiguity about what is actually submitted.

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 the usage context: a write operation that requires confirmation, backed by the schema's confirmed-clause description. It never names an alternative or an explicit when-not condition, so the agent must infer from the sibling names that this is the only submission path.

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. 4 tool updatesv0.1.0
    • First observedvod_auth_status
    • First observedvod_devkit_info
    • First observedvod_list_submitted
    • First observedvod_submit_voices

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation4/5

Each tool targets a distinct operation: write submission, local ledger query, auth self-check, and plugin self-description. The only mild overlap is between vod_auth_status and vod_devkit_info, both of which report configuration/environment info, but their descriptions make the split (auth/key status vs. version/host identity) reasonably clear.

Naming Consistency3/5

All tools share the consistent 'vod_' prefix, which aids grouping. However, the suffixes mix conventions: verb-first (submit_voices, list_submitted) alongside noun-first (devkit_info, auth_status), so the pattern is readable but not fully predictable.

Tool Count4/5

Four tools is a well-scoped surface for a focused feedback-submission plugin with auth and introspection needs. Each tool earns its place, though the set is on the lean side.

Completeness4/5

The surface covers the core lifecycle: submit feedback, list locally submitted items, verify auth, and report plugin metadata, which supports the stated purpose. Missing per-item detail retrieval or update/cancel operations, but submissions appear intentionally append-only, so gaps are minor.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables controlled AI-agent access to enterprise-shaped tools with a deny-by-default gated write path, human approval, dry-run execution, and append-only audit logging.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables coding agents to run offline voice-agent call forensics over local stdio, scoring recordings and reading/verifying evidence to isolate failures. It also proposes fixes and regression checks so broken calls can be pinned and prevented from shipping again.
    114 PyPI
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLM clients to search, read, and patch a trusted source repository with rollback-safe edits, Git operations, and allowlisted validation over stdio or OAuth-protected HTTP. Keeps secrets and arbitrary shell access out of reach while enforcing bounded batched I/O and operator-controlled workspace trust.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables remote agents on Windows to read, write, search, and run code strictly inside folders allowed by an explicit policy file, while also providing fleet task registry, queue, blind review, acceptance, and git integration.
    1
    MIT