yuntu-mcp-server
yuntu-mcp-server
云途知汇 컴퓨팅 스케줄링 **MCP Server(호스팅 가능 버전)**로, Python FastMCP로 구현되었으며, Go 버전 MCP Server의 세 가지 도구와 기능이 일치합니다:
chat_completion: 대형 모델 대화 호출, 채널 라우팅 + 장애 조치, content 및 token 사용량 반환(실제 Token 차감)get_balance: 현재 테넌트 잔액 조회(token_balance / balance)list_models: 현재 사용 가능한 모델 나열
참고: 이 버전에는 아직 「가격/할인」 로직이 포함되어 있지 않으며, 「잔액 > 0 확인 + 실제 Token 수 차감」만 수행하여 먼저 호스팅 경로를 구동합니다. 이후에 가격/할인을 연동할 예정입니다.
실행 방법
로컬 개발 / 단위 테스트
python -m venv .venv
.venv/Scripts/python -m pip install -e .
.venv/Scripts/python tests/test_smoke.py # 逻辑冒烟测试(SQLite)uvx로 직접 실행(PyPI 배포 후, 魔搭 호스팅)
먼저 PyPI에 배포한 다음, 환경 변수에서 런타임 매개변수를 구성하면 uvx로 바로 실행할 수 있습니다:
uvx yuntu-mcp-serverHTTP 모드(선택 사항, Go 버전 /mcp 경로와 일치)
MCP_TRANSPORT=http MCP_PORT=8081 uvx yuntu-mcp-server
# 监听 http://0.0.0.0:8081/mcp (Streamable HTTP)Related MCP server: LM Studio MCP Bridge
환경 변수
변수 | 필수 | 설명 |
| 예 | 데이터베이스 연결 문자열. MySQL: |
| 예 | API Key 암호화 키(≥16자), 云途知汇 메인 플랫폼과 일치해야 함(채널 API Key 복호화, 테넌트 조회에 사용) |
| 아니요 | 현재 테넌트의 API Key(stdio에는 HTTP Header가 없으므로 런타임 환경 변수로 테넌트를 식별; 누락 시 |
| 아니요 |
|
| 아니요 | HTTP 모드 수신 주소/포트, 기본값 |
인증 기준
Go 버전과 동일:
api_keys테이블은key_hash(평문 SHA-256)로 조회하며, 평문을 저장하지 않습니다.enabled,expires_at을 검증하고,tenant_id를 과금/기능 판단의 주체로 사용합니다.채널
upstream_configs.api_key는 동일한 암호화 키로 복호화한 후 업스트림을 호출합니다(복호화 실패 시 평문으로 간주).
PyPI에 배포
python -m pip install build
python -m build # 生成 dist/ 下的 wheel 与 sdist
python -m twine upload dist/* # 需配置 PyPI 令牌배포 후 검증:
DB_DSN="user:pass@tcp(host:3306)/db?charset=utf8mb4" \
API_KEY_ENCRYPT_SECRET="<与主平台一致>" \
MCP_API_KEY="<租户Key>" \
uvx yuntu-mcp-serverAvailable Tools
3 toolschat_completionB
调用大模型进行对话,从渠道管理中选择可用渠道并自动扣除 Token。
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | deepseek-v4-flash | |
| messages | Yes | ||
| temperature | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. It does disclose meaningful behavior — automatic channel selection and token deduction from '渠道管理' — which signals real cost implications beyond what the schema shows. However, it omits details like failure semantics, rate limits, and response format (though an output schema does exist to cover returns).
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 tight sentence in Chinese, front-loaded with the core purpose before the operational detail. No wasted words and appropriately sized for a simple tool. It earns near-top marks for conciseness, though it bundles two ideas into one sentence rather than using structured separation.
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 3-parameter tool with an output schema covering return values, the description covers purpose and cost behavior adequately. The main completeness gaps are the absence of any parameter-level guidance (at 0% schema coverage this matters) and no error or safety context, but the tool is simple enough that the gaps are moderate rather than severe.
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 0%, so the description must compensate, yet it mentions none of the three parameters (model, messages, temperature). The schema only provides type/default info; the description adds nothing about how to construct messages or how temperature affects output. It fails to fill the coverage gap.
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 clear verb+resource: '调用大模型进行对话' (call the large model for conversation). It is implicitly differentiated from siblings — get_balance and list_models clearly relate to balance checking and model listing, while this tool performs the actual dialogue. However, it does not explicitly name the siblings, so differentiation is inferred rather than stated.
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 is implied by the purpose: an agent can infer this tool is for generating chat responses while siblings handle balance and model listing. The description provides context that this operation consumes tokens ('自动扣除 Token'), but it gives no explicit when-to-use, when-not-to-use, or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceA
查询当前租户的 Token 余额(需配置 MCP_API_KEY 识别租户)。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 does disclose the authentication requirement, which is key behavioral context. However, it does not state that the operation is read-only, whether there are any rate limits or side effects, or what the response format will be. Since the output schema exists, return format is covered there, but the description offers minimal behavioral transparency beyond the prerequisite. This is adequate but not rich, warranting a 3.
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 one short sentence that front-loads the core purpose and then adds the key prerequisite. Every word earns its place; there is no redundancy or fluff. This is a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is largely complete. It covers the essential purpose and the auth prerequisite, which are the main contextual gaps an agent might need. It could potentially mention that it fetches the balance for the current tenant context, but that is already implied by '当前租户'. A 4 reflects that it is sufficient but not exhaustive – for instance, it doesn't clarify whether the balance is for tokens specifically used in this MCP server, though that is likely unambiguous. Minor gaps exist but none are critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to add beyond the schema. The baseline of 4 is appropriate because there is no semantic gap to fill. The description correctly omits parameter details.
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 ('查询' – query) and a clear resource ('当前租户的 Token 余额' – current tenant's token balance). It naturally distinguishes itself from sibling tools chat_completion and list_models, as balance checking is an unrelated operation. The purpose is unambiguous and complete.
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 mentions a prerequisite: '需配置 MCP_API_KEY 识别租户' (requires configuring MCP_API_KEY to identify the tenant). This tells the agent when the tool is usable. It does not explicitly state when not to use it versus alternatives, but the tool's function is so distinct from its siblings (chat and model listing) that no further routing guidance is needed. A 4 is appropriate for clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
列出当前可用的所有模型列表。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 states that the tool lists models, which implies a read-only operation with no side effects. While it does not mention auth requirements or rate limits, none are expected for a simple listing tool, so the description is adequately transparent.
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, concise sentence that front-loads the core purpose. There is no redundant or irrelevant content, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters) and the presence of an output schema (per context signals), the description is fully complete. It covers everything an agent needs to know to use the tool correctly; the schema handles 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 tool has zero parameters, and the schema coverage is trivially 100%. According to the scoring guideline, the baseline for 0 params is 4. The description adds no parameter-specific information because there are none to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it lists all currently available models. The verb '列出' and resource '模型列表' are specific, and it is distinct from sibling tools like chat_completion and get_balance, which serve different functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It simply states what it does without mentioning exclusion conditions or typical use cases (e.g., before selecting a model for chat). The usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: chat_completion handles LLM interactions, get_balance checks token quota, and list_models shows available models. No overlap or ambiguity between them.
All three tool names follow a consistent verb_noun pattern in snake_case: chat_completion, get_balance, list_models. The naming is uniform and predictable.
With only 3 tools, the surface is minimal but appropriate for a straightforward LLM gateway. It covers the essential actions (use model, check balance, list models) without unnecessary bloat, though a few more (e.g., channel management) could be expected.
The tool set covers the core user-facing operations for an LLM gateway: chatting, checking balance, and discovering models. It lacks administrative features like managing channels, but for the apparent consumer-focused scope, these are reasonable gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect MCP clients to 2,000+ AI models without managing provider API keys.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables MCP clients to interact with local LLMs via LM Studio, supporting dynamic chat, vision, RAG, file interaction, and model orchestration.28
- AlicenseAqualityCmaintenanceMCP server that completes prompts with automatic provider fallback across OpenAI, Anthropic Claude, and Google Gemini. It is rate-limit aware, retries on transient failures, and provides a transparent attempt log.217MIT
- FlicenseAqualityCmaintenanceUnified MCP server for querying multiple LLM providers (Gemini, OpenAI, Anthropic, etc.) with advanced routing, cost optimization, and fallback resilience.215
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Drq112112Hjx/yuntu-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server