fast-h3yun
用你自己的 氚云 账号登录,把网页工作台里的应用、表单、记录做成 FastMCP 工具。
默认是 STDIO MCP:由 Cursor、Claude Desktop 等客户端拉起进程,不占端口。OPC Feed 目前走 URL,用 --http。
这不是氚云官方产品,也不是官方 OpenAPI。会话来自网页登录:手机号 + 密码 → JWT + EngineCode。能看到什么,取决于这个登录用户的权限。
接线(Agent 先读这里)
给人类和 Agent 的同一套步骤。先装 uv(Python 3.12+)。建议用权限收窄的只读氚云账号。
克隆并安装:
git clone https://github.com/ironfrancis/fast-h3yun.git
cd fast-h3yun
uv sync选一种客户端配置(下面两段 JSON 复制即用,把路径和账号换成当前机器)。
没把手机号密码写进
env时,连上后先调用h3yun_login。不要把密码写进 git,也不要提交
.env。
Related MCP server: Feishu MCP Server
Cursor / Claude Desktop(推荐,STDIO)
客户端自己执行 command,用 stdin/stdout 通信。不要先手动起服务。
把仓库的绝对路径和氚云账号填进去,写入 Cursor 的 ~/.cursor/mcp.json(或项目 .cursor/mcp.json)、Claude 的 MCP 设置:
{
"mcpServers": {
"h3yun": {
"command": "uv",
"args": [
"run",
"--directory",
"/ABS/PATH/fast-h3yun",
"fast-h3yun"
],
"env": {
"H3YUN_MOBILE": "YOUR_MOBILE",
"H3YUN_PASSWORD": "YOUR_PASSWORD"
}
}
}
}env 也可以留空,连上后用工具 h3yun_login 输入手机号和密码。
OPC Feed(HTTP URL)
OPC 的 mcp_connection_parse → probe → propose 吃的是 URL,不是 STDIO。在本机先起 HTTP,再把 JSON 贴进对话:
cd /ABS/PATH/fast-h3yun
uv sync
uv run fast-h3yun --http默认地址:http://127.0.0.1:8765/mcp
{
"mcpServers": {
"h3yun": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}Agent:把上面这段交给 mcp_connection_parse,然后 mcp_connection_probe,再 mcp_connection_propose。氚云账号放在本服务的环境变量或 h3yun_login,不要写进 OPC 仓库。
能做什么
工具 | 作用 |
| 手机号和密码登录。 |
| 当前用户和引擎 |
| 应用列表 |
| 某个应用下的表单 |
| 按名称搜表单 |
| 分页查记录 |
| 按 ObjectId 取一条 |
第一版只读:不会创建、修改、删除或审批。典型顺序:h3yun_login → h3yun_session_info → h3yun_list_apps → h3yun_search_forms 或 h3yun_list_forms → h3yun_query_records。
环境变量
变量 | 说明 |
| 登录手机号。不填则必须调用 |
| 登录密码。不填则必须调用 |
| 多引擎账号时指定引擎 |
| 验证码挡住密码登录时的兜底 JWT |
| 默认 |
| 仅 |
也可以 cp .env.example .env 后填写。STDIO 模式下更常见的是写在客户端 JSON 的 env 里。
限制
网页
/v1没有官方稳定性承诺,氚云发版可能改字段。密码错误次数过多会被锁;本服务会缓存 token,并限制登录频率。
线上密码登录可能弹出阿里云验证码。无人值守可改用浏览器里已登录的
H3YUN_TOKEN+H3YUN_ENGINE_CODE。--http不对调用方鉴权。默认只监听本机,不要把端口暴露到公网。不要提交
.env、token 或 EngineSecret。工具返回值会剥离 password / token。
uv run pytest许可
MIT。欢迎看 CONTRIBUTING.md 和 SECURITY.md。
Available Tools
7 toolsh3yun_get_recordA
Load one business record by ObjectId.
| Name | Required | Description | Default |
|---|---|---|---|
| object_id | Yes | Record ObjectId. | |
| schema_code | Yes | Form schemaCode / node code. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. 'Load' clearly conveys a read-only retrieval and does not suggest mutation, but it does not disclose authentication requirements, behavior when the ObjectId is not found, or any other operational traits. Adequate but with clear gaps.
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?
A single, direct sentence with no filler. The action and the primary retrieval key are front-loaded, making the purpose immediately scannable for an agent.
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 get-by-id tool with only two required parameters, full schema coverage, and an output schema, the description is mostly sufficient for correct invocation. It lacks explicit sibling differentiation and authentication/session context, but those are not essential when the caller already has a known ObjectId.
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 100%, and the input schema already defines object_id as 'Record ObjectId.' and schema_code as 'Form schemaCode / node code.' The description adds little beyond reinforcing that object_id is the lookup key, so it does not meaningfully enrich the structured parameter documentation.
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 states a specific action ('Load'), a concrete resource ('one business record'), and the lookup mechanism ('by ObjectId'). The singular 'one' and use of ObjectId clearly distinguish it from the sibling h3yun_query_records, which implies searching/filtering rather than direct retrieval.
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 phrase 'by ObjectId' implies the tool should be used when the caller already knows the exact ID of a single record. However, it does not explicitly say when not to use it, does not name h3yun_query_records as the alternative for searching, and provides no guidance about prerequisites such as authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h3yun_list_appsB
List applications visible to the signed-in user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that applications are 'visible to the signed-in user,' implying authentication context, but it does not disclose side effects, rate limits, pagination, or any other behavioral traits. For a tool with zero annotation coverage, this is insufficient.
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 a single sentence that fronts the action verb 'List' and contains no filler. It is both concise and well-structured, with every word earning its place.
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 has an output schema, so return structure is handled separately. The description covers the core function and user context, but it lacks explicit guidance on choosing this tool over alternatives and omits notes on pagination or limits. It is minimally adequate for a zero-parameter tool but leaves room for improvement.
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 tool has no parameters, so the schema is completely covered (empty). The baseline is 4, and the description adds meaningful context by indicating that results are filtered by the signed-in user's visibility, which enriches the semantic meaning beyond the empty schema. No deduction needed.
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 'List' with the resource 'applications' and scopes it to 'visible to the signed-in user.' This clearly differentiates it from siblings like h3yun_list_forms by the object type, though it does not explicitly name alternatives. It is close to a 5 but stops short of naming competing siblings.
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 guidance on when to use this tool versus its siblings (e.g., h3yun_list_forms or h3yun_search_forms). It simply states what it does without any mention of alternatives, exclusions, or contextual prerequisites, leaving the agent to infer based on resource names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h3yun_list_formsB
List form nodes under one application.
| Name | Required | Description | Default |
|---|---|---|---|
| app_code | Yes | Application code from h3yun_list_apps. | |
| forms_only | No | If true, keep form/workflow nodes (200/210) only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'List form nodes' and does not disclose the return shape, pagination, authentication requirements, or the default filtering behavior (forms_only defaults to true, keeping only 200/210 nodes). The forms_only parameter description adds partial behavioral context, but the tool description itself offers almost no behavior beyond the operation name.
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 a single eight-word sentence with the verb front-loaded and zero filler. It is efficient, though it borders on under-specification — the same brevity that helps clarity is also the reason behavioral detail is missing.
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?
An output schema exists, so return values do not need to be explained in the description, and the two parameters are fully covered by schema descriptions. However, with no annotations, the description fails to mention that auth is likely required (h3yun_login exists as a sibling), does not diffeerentiate from search_forms, and relies on the parameter description for the sequencing hint. Adequate for a simple 2-param list tool, but with noticeable gaps.
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 100%, so the schema already documents both parameters adequately (app_code's source and forms_only's filtering semantics). The tool description adds only marginal value by contextualizing app_code as scoping to 'one application' and tying 'form nodes' to the forms_only filter. This meets the baseline for high coverage but adds little beyond it.
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 a specific verb and resource ('List form nodes') and adds a scope ('under one application'), which distinguishes it from the sibling h3yun_list_apps (which lists applications, not nodes). It also reads differently from h3yun_search_forms ('list' vs 'search'). However, it is terse and does not clarify what a 'form node' is, leaving some ambiguity.
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 imposed: the required app_code parameter is described as coming 'from h3yun_list_apps', which implies a sequencing step, and 'under one application' implies the caller must already have an app_code in hand. But there is no explicit when-to-use versus the sibling h3yun_search_forms, no prerequisites (e.g., h3yun_login), and no exclusion conditions. The guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h3yun_loginA
Sign in to H3 Yun with mobile and password. Required before other tools unless env credentials are set.
| Name | Required | Description | Default |
|---|---|---|---|
| mobile | Yes | H3 Yun account mobile number. | |
| password | Yes | H3 Yun account password. Never returned by tools. | |
| engine_code | No | Optional engine code when the account belongs to more than one tenant. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It conveys that login is a prerequisite and establishes some session context, but it does not disclose session lifecycle, idempotency, re-login behavior, or failure semantics. This is adequate for a straightforward login tool but leaves typical behavioral questions unanswered.
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 with no filler. The core action is front-loaded, and the critical usage condition ('Required before other tools') appears in the first sentence. Every word earns its place.
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, all parameters are documented in the schema, an output schema exists, and usage context is clear. The only omission is a note about what happens on repeated login or if a session already exists, but this is minor given the simplicity and the presence of structured schemas.
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 100%, so the schema already documents all three parameters including the optional engine_code. The description names 'mobile and password' but adds no new meaning beyond the schema. Baseline 3 applies.
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 states a specific verb ('Sign in') and resource ('H3 Yun') with the authentication method ('mobile and password'). It clearly distinguishes this tool from the sibling tools, which are post-login operations like listing apps/forms or querying records.
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 positions the tool as a precondition: 'Required before other tools unless env credentials are set.' This tells an agent when to invoke it and when it can be skipped, which is direct usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h3yun_query_recordsA
Query business records for one form. Respects the signed-in user's data scope.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | Optional list keyword if the view supports it. | |
| page_size | No | ||
| page_index | No | ||
| schema_code | Yes | Form schemaCode / node code. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It adds one meaningful behavioral trait: respecting the signed-in user's data scope. However, it does not disclose pagination behavior, result count limits, or whether the query is read-only beyond the implied 'query' verb.
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 with no filler. The core action is front-loaded, and the data-scope caveat is appended as a second useful sentence. Every word earns its place.
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 tool with 4 parameters and an output schema, the description is minimally sufficient for selection but not for invocation. It does not address how keyword filtering works, how pagination behaves, or how the data-scope restriction affects results beyond a brief mention.
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%, so the schema documents keyword and schema_code but not page_size or page_index. The description adds no parameter-level meaning at all, leaving pagination semantics entirely undocumented in both the description and 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 states a specific verb ('Query'), a resource ('business records'), and a scope ('for one form'). This clearly distinguishes it from sibling tools like h3yun_list_forms or h3yun_get_record, which operate on forms or single records.
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 records for one form — but it never explicitly names alternatives or exclusion criteria. An agent must infer the boundary against h3yun_get_record and h3yun_list_forms from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h3yun_search_formsB
Search forms by keyword across the current engine.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Form display name keyword. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the operation and scope but does not explain matching semantics, case sensitivity, result limits, or how it relates to the current engine state. Minimal beyond the literal action.
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?
A single sentence that is front-loaded with the action and scope, with no filler or redundancy. The description earns its length by being immediately interpretable.
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: one required string parameter with a complete schema description and an output schema available. The description is largely sufficient for correct invocation; the main gap is missing guidance on choosing between this and sibling list/query tools.
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 100%: the only parameter, keyword, is fully documented in the schema as a form display name keyword. The description adds no new parameter-level detail, so 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 states a specific verb ("Search"), resource ("forms"), and scope ("across the current engine"). It clearly distinguishes itself from list/get siblings by emphasizing keyword-based search, though it does not explicitly name an alternative.
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 phrase "by keyword" implies when to use this tool, and "across the current engine" bounds its context. However, it gives no explicit comparison to h3yun_list_forms or h3yun_query_records, nor any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h3yun_session_infoA
Return the signed-in H3 Yun user and current engine (tenant).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It clearly indicates a read-like 'Return' operation, but it does not mention prerequisites such as being signed in, possible error behavior, or whether any state is modified. The zero-parameter schema and 'Return' wording imply a safe read, though more explicit disclosure would be stronger.
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?
One short sentence states both the purpose and the exact return content without filler. The key information is front-loaded and easy to parse.
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 zero-parameter tool with an output schema, the description is nearly complete: it names the two pieces of information returned and the session context. It could add a note about requiring an established session or how it relates to h3yun_login, but the output schema likely covers return-value details.
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 input schema has zero parameters and 100% schema coverage, so there is no parameter ambiguity. A baseline of 4 applies for a zero-parameter tool, and the description appropriately adds no unnecessary parameter detail.
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 a clear verb ('Return') and names a specific resource (signed-in user and current engine/tenant). This uniquely identifies what the tool does among siblings like h3yun_login, h3yun_list_apps, and h3yun_get_record, so an agent can distinguish it without opening schemas.
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 this tool is used to fetch session context, but it gives no explicit guidance about when to use it versus alternatives or whether any precondition such as logging in first is required. There are no stated exclusions or routing hints to other tools.
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.
7 tool updates
v0.1.0- First observed
h3yun_get_record - First observed
h3yun_list_apps - First observed
h3yun_list_forms - First observed
h3yun_login - First observed
h3yun_query_records - First observed
h3yun_search_forms - First observed
h3yun_session_info
TDQS
Scored across 7 tools
Each tool targets a distinct concern: auth, session, app discovery, form discovery, record fetch, and record query. Even the similar list_forms and search_forms are clearly separated by scope (one app vs. keyword across engine).
Most tools follow an h3yun_verb_noun pattern (list_apps, list_forms, get_record, query_records). Login and session_info deviate slightly from the full verb_noun structure, but the prefix keeps the set predictable.
Seven tools is well-scoped for an H3 Yun integration: authentication, session context, app/form discovery, and record retrieval are all covered without redundancy or bloat.
The read-oriented workflow is well covered: login, discover apps/forms, search forms, and fetch/query records. Write operations like creating or updating records are absent, but the tool set appears intentionally read-only, with only minor missing metadata capabilities.
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
- OneOAuthai.withone
Find, document and execute authenticated API calls across 700+ apps via one MCP server
Let AI agents query data and act across all your business apps via MCP.
XFA's remote MCP server — query device posture, compliance, policies & CVEs. Read-only.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables to operate a WeChat Official Account via MCP tools, including searching and executing API workflows and uploading files.MIT
- FlicenseAqualityBmaintenanceEnables reading, creating, updating, and appending Feishu documents, as well as querying and updating Bitable fields and records via the MCP protocol.12-
- FlicenseCqualityCmaintenanceEnables read-only querying of Kingdee's Three-Effect project management system, covering projects, reimbursements, loans, payments, working hours, and budgets, via MCP tools.28-
- FlicenseNot gradedqualityCmaintenanceEnables read-only queries of i桂航 campus data, including schedules, classes, terms, and campus information through MCP tools.-