mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-10-30 04:06:04 +08:00
- docs/dev/plugins.md 改为总览与导航,旧内容拆入 docs/dev/plugins/ - 新增核心概念、配置表单、事件、前端挂载点、命令行、签名与分发、内置插件、示例页 - 每个扩展点一页,侧边栏由页面表生成 - 改正旧文档中下载器配置、hardlink path_map 与补链按钮的过时描述
36 lines
1.5 KiB
Markdown
36 lines
1.5 KiB
Markdown
# MCP 工具与资源(mcp_tool / mcp_resource)
|
||
|
||
把插件的能力暴露给 MCP 客户端。
|
||
|
||
```python
|
||
from ab_sdk import points, provider
|
||
from ab_sdk.mcp import McpResource, McpTool
|
||
|
||
@provider(points.MCP_TOOL, id="search")
|
||
def search_tool(self):
|
||
async def handler(args: dict):
|
||
return {"results": [...], "keyword": args["keyword"]}
|
||
|
||
return McpTool(
|
||
description="在私有站点搜索",
|
||
handler=handler,
|
||
input_schema={
|
||
"type": "object",
|
||
"properties": {"keyword": {"type": "string"}},
|
||
"required": ["keyword"],
|
||
},
|
||
)
|
||
|
||
@provider(points.MCP_RESOURCE, id="stats")
|
||
def stats_resource(self):
|
||
async def handler():
|
||
return {"count": 3}
|
||
|
||
return McpResource(name="统计", handler=handler)
|
||
```
|
||
|
||
- 对外名称自动加插件 id 前缀:工具名为 `<插件 id>__<id>`(双下划线),资源 URI 为 `autobangumi://plugins/<插件 id>/<id>`。不用 `.` 分隔,因为不少 MCP 客户端把工具名原样交给 LLM API,而后者通常只接受 `^[a-zA-Z0-9_-]{1,64}$`。不合规的工具名会被跳过并写日志。
|
||
- 工具处理函数接收已按 `input_schema` 校验的参数字典,返回可 JSON 序列化的对象。资源处理函数返回字符串(原样)或可 JSON 序列化的对象。
|
||
- 抛出的异常以 `{"error": "..."}` 返回给客户端,并计入熔断。工具默认超时 60 秒(`McpTool(timeout=...)`)。
|
||
- MCP 端点沿用 AB 的访问控制(IP 白名单或 `scope=mcp` 令牌),插件无需自行鉴权。
|