fast-h3yun
Click on "Deploy 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., "@fast-h3yunlist all apps in my H3 Yun workbench"
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.
Log in with your own H3Yun account and turn the apps, forms, and records in the web workbench into FastMCP tools. Use them for queries from Cursor, OPC Feed, or other MCP clients.
This is not an official H3Yun product, nor the official OpenAPI. The session comes from web login: phone number + password → JWT + EngineCode. What you can see depends on the permissions of the logged-in user.
What it can do
Tool | Purpose |
| Log in with phone number and password. |
| Current user and engine |
| App list |
| Forms under a given app |
| Search forms by name |
| Query records with pagination |
| Get one record by ObjectId |
First version is read-only: no create, modify, delete, or approval.
Related MCP server: Feishu Bitable MCP Server
Getting started
Requires Python 3.12+ and uv. It is recommended to use a read-only H3Yun account with narrowed permissions.
git clone https://github.com/ironfrancis/fast-h3yun.git
cd fast-h3yun
cp .env.example .env
uv sync --extra dev
uv run fast-h3yunDefault address: http://127.0.0.1:8765/mcp
You can prefill H3YUN_MOBILE / H3YUN_PASSWORD in .env. It can also start without them; after connecting, call h3yun_login first.
Connecting to an MCP client
{
"mcpServers": {
"h3yun": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}OPC Feed goes through mcp_connection_parse → probe → propose. For Cursor, configure the same URL in the MCP settings. Keep the account and password in this service; do not write them into the client repository.
Environment variables
Variable | Description |
| Login phone number. If not set, |
| Login password. If not set, |
| Specify the engine for multi-engine accounts |
| Fallback JWT when a captcha blocks password login |
| Default |
| Default |
Limitations
The web
/v1has no official stability guarantee; H3Yun releases may change fields.Too many wrong password attempts will lock the account; this service caches the token and rate-limits login.
Online password login may trigger an Alibaba Cloud captcha. For unattended use, switch to an already-logged-in
H3YUN_TOKEN+H3YUN_ENGINE_CODEfrom the browser.The MCP service itself does not authenticate callers. By default it only listens on localhost; do not expose the port to the public internet.
Do not commit
.env, tokens, or EngineSecret. Tool return values strip password / token.
uv run pytestLicense
MIT. Feel free to check out CONTRIBUTING.md and 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.
Related MCP Connectors
- OneOAuthai.withone
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
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 gradedqualityCmaintenanceEnables to operate a WeChat Official Account via MCP tools, including searching and executing API workflows and uploading files.MIT
- AlicenseNot gradedqualityDmaintenanceEnables interacting with Feishu (Lark) multidimensional tables through MCP tools. Supports listing tables, reading records, searching records and apps, and getting views.240 npmMIT
- 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-