Skip to main content
Glama
ironfrancis

fast-h3yun

by ironfrancis

자신의 氚云 계정으로 로그인하여 웹 작업대의 앱, 폼, 기록을 FastMCP 도구로 만듭니다. Cursor, OPC Feed 또는 다른 MCP 클라이언트에서 조회하는 데 사용할 수 있습니다.

이것은 氚云 공식 제품도 아니고 공식 OpenAPI도 아닙니다. 세션은 웹 로그인에서 비롯됩니다: 手机号 + 密码 → JWT + EngineCode. 무엇을 볼 수 있는지는 해당 로그인 사용자의 권한에 따라 달라집니다.

할 수 있는 일

도구

기능

h3yun_login

휴대폰 번호와 비밀번호로 로그인합니다. mobile / password 필수

h3yun_session_info

현재 사용자 및 엔진

h3yun_list_apps

앱 목록

h3yun_list_forms

특정 앱의 폼

h3yun_search_forms

이름으로 폼 검색

h3yun_query_records

페이지 단위로 기록 조회

h3yun_get_record

ObjectId로 단건 조회

1차 버전은 읽기 전용입니다. 생성, 수정, 삭제 또는 승인을 하지 않습니다.

Related MCP server: Feishu MCP Server

시작하기

Python 3.12+와 uv가 필요합니다. 권한 범위를 최소화한 읽기 전용 氚云 계정을 권장합니다.

git clone https://github.com/ironfrancis/fast-h3yun.git
cd fast-h3yun
cp .env.example .env
uv sync --extra dev
uv run fast-h3yun

기본 주소: http://127.0.0.1:8765/mcp

.env에 H3YUN_MOBILE / H3YUN_PASSWORD를 미리 채워 둘 수 있습니다. 입력하지 않아도 시작할 수 있으며, 연결한 뒤 먼저 h3yun_login을 호출하세요.

MCP 클라이언트에 연결

{
  "mcpServers": {
    "h3yun": {
      "url": "http://127.0.0.1:8765/mcp"
    }
  }
}

OPC Feed는 mcp_connection_parse → probe → propose 과정으로 연결합니다. Cursor는 동일한 URL을 MCP 설정에 추가하기만 하면 됩니다. 계정과 비밀번호는 본 서비스에 남겨 두고, 클라이언트 저장소에 넣지 마세요.

환경 변수

변수

설명

H3YUN_MOBILE

로그인 휴대폰 번호. 입력하지 않으면 h3yun_login을 호출해야 합니다

H3YUN_PASSWORD

로그인 비밀번호. 입력하지 않으면 h3yun_login을 호출해야 합니다

H3YUN_ENGINE_CODE

멀티 엔진 계정에서 엔진 지정

H3YUN_TOKEN

인증 코드가 비밀번호 로그인을 막을 때 사용하는 대체 JWT

H3YUN_BASE_URL

기본값 https://www.h3yun.com

H3YUN_HOST / H3YUN_PORT

기본값 127.0.0.1 / 8765

제한 사항

  • 웹 /v1은 공식 안정성 보장이 없으며, 氚云 릴리스에서 필드가 변경될 수 있습니다.

  • 비밀번호 오류 횟수가 너무 많으면 계정이 잠깁니다. 본 서비스는 토큰을 캐시하고 로그인 빈도를 제한합니다.

  • 온라인 비밀번호 로그인 시 阿里云 인증 코드가 나타날 수 있습니다. 무인 환경에서는 브라우저에 이미 로그인된 H3YUN_TOKEN + H3YUN_ENGINE_CODE를 사용하면 됩니다.

  • MCP 서비스 자체는 호출자를 인증하지 않습니다. 기본적으로 로컬에서만 수신 대기하므로 포트를 공개 네트워크에 노출하지 마세요.

  • .env, 토큰 또는 EngineSecret을 커밋하지 마세요. 도구 반환 값에서 password / token이 제거됩니다.

uv run pytest

라이선스

MIT입니다. CONTRIBUTING.md와 SECURITY.md를 확인해 주세요.

Available Tools

7 tools
h3yun_get_recordA

Load one business record by ObjectId.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_idYesRecord ObjectId.
schema_codeYesForm schemaCode / node code.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_codeYesApplication code from h3yun_list_apps.
forms_onlyNoIf true, keep form/workflow nodes (200/210) only.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mobileYesH3 Yun account mobile number.
passwordYesH3 Yun account password. Never returned by tools.
engine_codeNoOptional engine code when the account belongs to more than one tenant.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordNoOptional list keyword if the view supports it.
page_sizeNo
page_indexNo
schema_codeYesForm schemaCode / node code.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYesForm display name keyword.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv0.1.0
    • First observedh3yun_get_record
    • First observedh3yun_list_apps
    • First observedh3yun_list_forms
    • First observedh3yun_login
    • First observedh3yun_query_records
    • First observedh3yun_search_forms
    • First observedh3yun_session_info

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

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).

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    C
    maintenance
    Enables read-only querying of Kingdee's Three-Effect project management system, covering projects, reimbursements, loans, payments, working hours, and budgets, via MCP tools.
    28
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only queries of i桂航 campus data, including schedules, classes, terms, and campus information through MCP tools.
    -