## 中文 补齐已有 owner 与已锁定上游内容可证明的许可证、技能类型和收录版本。保留 Anthropic Source Available 和其他附加条件,不把所有内容统一标为 MIT,不提升 listing-only 的安装准入。 README 保留最新的双语结构及以 manifest 为准的数量口径,增加静态目录不存访问量、下载量、评分或 Stars 的边界。 发布兼容性:**本 PR 不包含**两支团队新增的本地化字段,也不包含微信支付 `latestVersion: 1.0`;旧客户端会拒绝这些新字段,另以待发布 PR 保留,等匹配客户端发布后再合并。 验证:47 项目录校验测试、19 项 i18n 测试、5 项合集生成测试通过;完整目录/i18n/翻译新鲜度检查通过,6 个固定来源合集的生成检查通过,2 个浮动来源按既有规则明确跳过。发现并修复了生成器在 Windows 使用反斜杠造成的误报:输出改为 POSIX 路径,比较规则不放宽、不重写合集数据。 ## English Fill only license, type and listed-release facts supported by existing owners or pinned upstream content. Preserve custom license restrictions and acquisition eligibility. Keep the current bilingual README and manifest-derived inventory; do not author usage analytics. This PR deliberately excludes localized team fields and the two-part WeChat Pay version that older clients reject. Those changes remain pending a compatible client release. Validation passes: 47 catalog-validator tests, 19 i18n tests, five collection-generator tests, complete catalog and translation checks, and generated inventory checks for six pinned collections. Two mutable sources remain explicitly skipped. Fix Windows-generated path separators without weakening comparison or changing declared children.
7.0 KiB
license, name, description, version, type, risk_level, status, disable-model-invocation, tags, metadata, market
| license | name | description | version | type | risk_level | status | disable-model-invocation | tags | metadata | market | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MIT | using-services | Discover and invoke HTTP/MCP services already registered in the global catalog. Use when the user asks the Agent to call an API, search for an existing service, or query a backend that was registered via the registering-services skill. 调用某个 API、查找已有服务、访问已注册的后端服务时使用。 | 1.0.4 | meta | low | enabled | true |
|
|
|
using-services Skill
Native applications and outward protocols
DesireCore Control is a native-app for external agents, not an installed internal MCP service. The presence of its dashboard or outward /mcp endpoint does not authorize this Agent to invoke it through using-services, register it, or bypass GUI approval. Use app-install-manager (1.5.2 or newer) for its App lifecycle and the governed ControlDesireCoreGui for runtime GUI access. An App installation must not mint an internal service or svc-* skill.
L0: One-line Summary
Teach the Agent how to look up and call services from the global "Apps & Services" catalog.
L1: Overview
The "Apps & Services" catalog stores all registered HTTP/MCP services. This
meta-skill is your manual for finding the right service and invoking
it correctly. Each non-trivial registered service also has its own
svc-<id> Skill auto-generated from its operations — prefer that when it
exists; this meta-skill is the fallback for ad-hoc discovery.
When to use
- The user asks you to do something that might already have a registered service (e.g. "search the product database", "send a notification")
- You see
svc-<id>Skill in your available skills list — activate it directly - You need to call an HTTP API and want to check if it's been registered (to benefit from governance, credential injection, and audit)
When NOT to use
- The user gives you a one-off URL to fetch — use
HttpRequestdirectly - You already have the per-service
svc-<id>Skill activated — follow it instead, it's more specific
L2: How to discover and call
Step 1 — List the catalog
Fetch the registry:
tool: HttpRequest
parameters:
url: http://127.0.0.1:<agent-service-port>/api/registry/services
method: GET
Response shape (excerpt):
{
"data": {
"services": [
{
"id": "acme-search-api",
"name": "Acme Search API",
"protocol": "http",
"endpoint": "https://api.acme.example/search",
"tags": ["search", "products"],
"status": "online",
"origin": "agent",
"reviewStatus": "approved",
"riskLevel": "medium",
"operations": [...]
}
],
"total": 1,
"source": "official"
}
}
Step 2 — Pick a candidate
Filter by tags, protocol, name. Important checks before invoking:
status === 'online'→ safe to callstatus === 'offline'/'error'→ tell the user the service is down, don't retry blindlystatus === 'degraded'→ degrade gracefully, mention it to the userreviewStatus === 'pending'(onlyorigin='agent') → you can only call it ifregisteredByis you; otherwise ask the user to promote itriskLevel === 'critical'→ expect a human approval prompt on every call
Step 3 — Build the request (HTTP services)
If the service has operations, prefer them — they define stable contract
points. Build the URL as <endpoint><operation.path>.
tool: HttpRequest
parameters:
url: https://api.acme.example/search/v1/items?q=widget
method: GET
headers:
Authorization: "Bearer ${secrets/api-keys/acme}" # resolved at call time
If the service declares auth.secretRef, do not prompt the user for the
secret value during chat. The HttpRequest tool resolves it automatically.
Step 4 — Build the request (MCP services)
MCP services aren't called via HttpRequest — they are tools exposed through
the Agent's mcp_servers config:
- If you haven't added the MCP service to your Agent yet, POST to
http://127.0.0.1:<agent-service-port>/api/agents/<your-id>/mcp-serverswith{ serverId: '<service.id>', config: <connection> } - Next query, MCP discovery will auto-expose tools from the server
- Call the tools by their MCP-declared names directly
Step 5 — Handle the response
- 2xx → parse and use
- 4xx → likely a client error (bad params, missing auth); fix the request, then retry once; if it still fails, report to the user
- 5xx → server-side problem, report
statusof the service back so the user knows - Service-approval rejected → response will contain
"decision":"rejected"; do not retry, ask the user how to proceed
Step 6 — Don't fall through to raw URL fetching
If the catalog has a service for what you need, use it. Don't bypass
governance by calling an undeclared URL directly — HttpRequest will still
work, but you lose:
- Approval gating for high-risk operations
- Credential injection (you'd need to ask the user for keys yourself)
- Audit trail and
lastUsedtracking - Other Agents being able to reuse your call patterns
Failure modes
- Catalog read fails: just fall back to direct
HttpRequestand warn the user that governance is bypassed. - No matching service: ask the user if they want to register a new
one — activate
registering-servicesskill. status === 'offline': report the situation, suggest checking the underlying service, don't call anyway.