Skip to content

Web MCP Tools 参考 ​

字数
3134 字
阅读时间
15 分钟

概述 ​

Web MCP Tools 暴露了 NekoBot Web 后台的核心功能,允许 AI Agent 通过 MCP 协议管理会话、角色卡、世界书、记忆、知识库和 AI 模型。

所有工具返回 JSON 字符串,包含 ok 字段表示是否成功。

安全流程 ​

每个操作型工具统一走以下流程:

  1. 权限检查 — check_permission 校验当前 scope
  2. 工具启用检查 — is_tool_enabled 检查配置中是否启用
  3. 高危确认 — 需要 confirm=true 才能执行
  4. 输入校验 — Pydantic Schema 校验所有参数
  5. 执行 + 审计 — 执行操作并记录审计日志

数据存储 ​

数据文件路径格式
会话data/sessions.jsondict[session_id, session]
记忆data/memories.jsonlist[memory]
AI 模型data/ai_models.jsonlist[model]
角色卡data/character/profiles/*.json每个角色一个 JSON 文件
世界书data/character/world_books/*.json每个世界书一个 JSON 文件
知识库data/knowledge/documents/*.json每篇文档一个 JSON 文件
Token 用量data/token_stats.jsondict[model_name, stats]

写入操作使用原子写入(临时文件 + os.replace),并持有进程内线程锁保证并发安全。


会话 Tools ​

web_list_sessions ​

列出所有 Web 会话。

输入:无参数

输出示例:

json
{
  "ok": true,
  "count": 3,
  "sessions": [
    {
      "id": "a1b2c3d4-...",
      "name": "测试会话",
      "type": "web",
      "sender_name": "用户",
      "character_id": "char-001",
      "message_count": 12,
      "created_at": "2026-06-01T10:00:00",
      "archived": false,
      "session_mode": "character"
    }
  ]
}

web_get_session ​

获取会话详情。

输入:

参数类型必填说明
session_idstring是会话 ID(UUID 格式)

输出示例:

json
{
  "ok": true,
  "session": {
    "id": "a1b2c3d4-...",
    "name": "测试会话",
    "type": "web",
    "sender_name": "用户",
    "character_id": "char-001",
    "system_prompt": "你是一个助手",
    "scenario": "",
    "message_count": 12,
    "messages": ["...最近20条..."],
    "created_at": "2026-06-01T10:00:00",
    "archived": false,
    "session_mode": "character",
    "tags": []
  }
}

web_create_session ​

创建新的 Web 会话。

输入:

参数类型必填默认值说明
namestring否""会话名称(空则自动生成)
session_modestring否"character"会话模式:character / agent
sender_namestring否""发送者名称
system_promptstring否""系统提示词
first_messagestring否""开场白
character_idstring否""绑定的角色卡 ID
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "session_id": "a1b2c3d4-...",
  "name": "测试会话"
}

web_send_message ​

向指定会话发送一条用户消息。

警告

消息会被追加到会话的消息列表中,但 不会触发 AI 回复。需要通过 Web 端触发 AI 生成。

输入:

参数类型必填默认值说明
session_idstring是-会话 ID
contentstring是-消息内容
senderstring否"mcp_user"发送者标识
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "message_id": "msg-uuid-...",
  "session_id": "a1b2c3d4-..."
}

web_get_messages ​

获取会话的消息列表。

输入:

参数类型必填默认值说明
session_idstring是-会话 ID
limitint否50返回数量上限

输出示例:

json
{
  "ok": true,
  "count": 10,
  "total": 50,
  "messages": ["...最近N条(排除系统消息)..."]
}

web_delete_session ​

删除指定会话。永久删除,不可恢复。

输入:

参数类型必填默认值说明
session_idstring是-会话 ID
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "session_id": "a1b2c3d4-..."
}

角色卡 Tools ​

web_list_characters ​

列出所有角色卡。

输入:无参数

输出示例:

json
{
  "ok": true,
  "count": 2,
  "characters": [
    {
      "id": "char-001",
      "name": "小助手",
      "description": "一个友好的 AI 助手",
      "personality": "温柔、耐心",
      "scenario": "日常对话",
      "tags": ["助手", "日常"],
      "created_at": "2026-06-01T10:00:00"
    }
  ]
}

web_get_character ​

获取角色卡详情。

输入:

参数类型必填说明
character_idstring是角色卡 ID

输出示例:

json
{
  "ok": true,
  "character": {
    "id": "char-001",
    "name": "小助手",
    "description": "...",
    "personality": "...",
    "scenario": "...",
    "system_prompt": "...",
    "first_message": "...",
    "rules": ["保持友好", "不说脏话"],
    "tags": ["助手"],
    "created_at": "...",
    "updated_at": "..."
  }
}

web_create_character ​

创建新角色卡。

输入:

参数类型必填默认值说明
namestring是-角色名称
descriptionstring否""角色描述
personalitystring否""性格特征
scenariostring否""场景设定
system_promptstring否""系统提示词
first_messagestring否""开场白
rulesstring否""规则(逗号分隔)
tagsstring否""标签(逗号分隔)
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "character_id": "char-uuid-...",
  "name": "小助手"
}

web_update_character ​

更新角色卡。只更新传入的字段,未传入的字段保持不变。

字段更新语义

  • 字段值为 null(JSON)或不传 → 不更新
  • 字段值为空字符串 "" 或空列表 [] → 清空该字段

输入:

参数类型必填默认值说明
character_idstring是-角色卡 ID
namestring否null角色名称
descriptionstring否null角色描述
personalitystring否null性格特征
scenariostring否null场景设定
system_promptstring否null系统提示词
first_messagestring否null开场白
rulesstring否null规则(逗号分隔)
tagsstring否null标签(逗号分隔)
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "character_id": "char-001",
  "name": "新名字"
}

web_delete_character ​

删除角色卡。永久删除,不可恢复。

输入:

参数类型必填默认值说明
character_idstring是-角色卡 ID
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "character_id": "char-001"
}

世界书 Tools ​

web_list_world_books ​

列出所有世界书。

输入:无参数

输出示例:

json
{
  "ok": true,
  "count": 1,
  "world_books": [
    {
      "id": "book-001",
      "name": "奇幻世界观",
      "description": "一个剑与魔法的世界",
      "entry_count": 15,
      "character_ids": ["char-001"],
      "enabled": true,
      "created_at": "2026-06-01T10:00:00"
    }
  ]
}

web_get_world_book ​

获取世界书详情(包含所有条目)。

输入:

参数类型必填说明
book_idstring是世界书 ID

输出示例:

json
{
  "ok": true,
  "world_book": {
    "id": "book-001",
    "name": "奇幻世界观",
    "description": "...",
    "character_ids": ["char-001"],
    "entries": [
      {
        "id": "entry-001",
        "name": "王国历史",
        "keywords": ["王国", "历史"],
        "content": "王国建立于...",
        "priority": 50,
        "entry_type": "lore",
        "always_on": false,
        "enabled": true,
        "match_mode": "any"
      }
    ],
    "enabled": true,
    "created_at": "...",
    "updated_at": "..."
  }
}

web_create_world_book ​

创建新世界书。

输入:

参数类型必填默认值说明
namestring是-世界书名称
descriptionstring否""描述
character_idsstring否""绑定的角色 ID(逗号分隔)
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "book_id": "book-uuid-...",
  "name": "奇幻世界观"
}

web_add_world_book_entry ​

为世界书添加条目。

输入:

参数类型必填默认值说明
book_idstring是-世界书 ID
contentstring是-条目内容
namestring否""条目名称
keywordsstring否""关键词(逗号分隔)
priorityint否50优先级(数值越小越优先)
entry_typestring否"lore"条目类型:lore / location / npc / item / event / rule
always_onbool否false是否始终激活
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "entry_id": "entry-uuid-...",
  "book_id": "book-001"
}

web_delete_world_book ​

删除世界书。永久删除,不可恢复。

输入:

参数类型必填默认值说明
book_idstring是-世界书 ID
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "book_id": "book-001"
}

记忆 Tools ​

web_list_memories ​

列出记忆。可按条件筛选。

输入:

参数类型必填默认值说明
target_idstring否""按目标 ID 筛选
character_namestring否""按角色名筛选
mem_typestring否"all"记忆类型:all / long / short

输出示例:

json
{
  "ok": true,
  "count": 5,
  "memories": [
    {
      "id": "mem-001",
      "title": "用户喜欢猫",
      "content": "用户在对话中提到喜欢猫",
      "target_id": "session-001",
      "character_name": "小助手",
      "type": "long",
      "expire_days": 30,
      "priority": "normal",
      "created_at": "...",
      "updated_at": "..."
    }
  ]
}

web_add_memory ​

添加记忆。

输入:

参数类型必填默认值说明
titlestring是-记忆标题
contentstring是-记忆内容
target_idstring否""关联的目标 ID
character_namestring否""关联的角色名
mem_typestring否"long"记忆类型:long(长期)/ short(短期)
expire_daysint否7过期天数
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "memory_id": "mem-uuid-..."
}

web_update_memory ​

更新记忆。只更新传入的字段。

字段更新语义

与 web_update_character 相同:null = 不更新,空字符串 = 清空。

输入:

参数类型必填默认值说明
memory_idstring是-记忆 ID
titlestring否null标题
contentstring否null内容
mem_typestring否null类型:long / short
target_idstring否null关联目标 ID
character_namestring否null关联角色名
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "memory_id": "mem-001"
}

web_delete_memory ​

删除记忆。永久删除,不可恢复。

输入:

参数类型必填默认值说明
memory_idstring是-记忆 ID
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "memory_id": "mem-001"
}

知识库 Tools ​

web_list_knowledge ​

列出知识库文档。

输入:无参数

输出示例:

json
{
  "ok": true,
  "count": 3,
  "documents": [
    {
      "id": "doc-001",
      "title": "API 文档",
      "source": "内部 wiki",
      "tags": ["api", "技术"],
      "size": 1234,
      "preview": "这是文档的前200字...",
      "created_at": "2026-06-01T10:00:00"
    }
  ]
}

web_search_knowledge ​

搜索知识库。基于关键词匹配,返回最相关的结果。

输入:

参数类型必填默认值说明
querystring是-搜索关键词
top_kint否5返回数量上限

输出示例:

json
{
  "ok": true,
  "query": "API",
  "count": 2,
  "results": [
    {
      "doc_id": "doc-001",
      "title": "API 文档",
      "score": 15,
      "preview": "..."
    }
  ]
}

web_add_knowledge ​

添加知识库文档。

输入:

参数类型必填默认值说明
titlestring是-文档标题
contentstring是-文档内容
sourcestring否""来源
tagsstring否""标签(逗号分隔)
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "doc_id": "doc-uuid-...",
  "title": "API 文档"
}

web_delete_knowledge ​

删除知识库文档。永久删除,不可恢复。

输入:

参数类型必填默认值说明
doc_idstring是-文档 ID
confirmbool否false高危确认

输出示例:

json
{
  "ok": true,
  "doc_id": "doc-001"
}

AI 模型 Tools ​

web_list_ai_models ​

列出所有 AI 模型配置。

警告

API Key 会被脱敏显示为 ********。

输入:无参数

输出示例:

json
{
  "ok": true,
  "count": 2,
  "models": [
    {
      "id": "model-001",
      "name": "GPT-4o",
      "provider": "openai",
      "model": "gpt-4o",
      "purpose": "chat",
      "enabled": true,
      "base_url": "https://api.openai.com/v1",
      "temperature": 0.7,
      "max_tokens": 2000,
      "priority": 10,
      "input_price": 0.005,
      "output_price": 0.015
    }
  ]
}

web_get_active_models ​

获取各用途的当前活跃模型。按 priority(数值越小优先级越高)排序,每个用途取优先级最高的启用模型。

输入:无参数

输出示例:

json
{
  "ok": true,
  "active_models": {
    "chat": {
      "id": "model-001",
      "name": "GPT-4o",
      "model": "gpt-4o",
      "provider": "openai",
      "purpose": "chat",
      "priority": 10
    },
    "vision": {
      "id": "model-002",
      "name": "GPT-4o Vision",
      "model": "gpt-4o",
      "provider": "openai",
      "purpose": "vision",
      "priority": 10
    }
  }
}

web_get_token_usage ​

获取 Token 用量统计。

输入:

参数类型必填默认值说明
model_namestring否""指定模型名(空则返回所有)

输出示例(指定模型):

json
{
  "ok": true,
  "model_name": "gpt-4o",
  "usage": {
    "input_tokens": 100000,
    "output_tokens": 50000,
    "requests": 200
  }
}

输出示例(所有模型):

json
{
  "ok": true,
  "total": {
    "input_tokens": 500000,
    "output_tokens": 200000,
    "total_tokens": 700000,
    "requests": 1000
  },
  "by_model": {
    "gpt-4o": {
      "input_tokens": 100000,
      "output_tokens": 50000,
      "total_tokens": 150000,
      "requests": 200
    }
  }
}

权限模型 ​

Web Tools 遵循与 Gateway Tools 相同的权限体系:

等级权限说明
只读web.read查询会话、角色、记忆、模型等
操作web.write创建、更新、删除操作
超级管理admin全部能力

本地 stdio 模式默认具有所有权限。

错误格式 ​

所有工具返回统一的错误格式:

json
{
  "ok": false,
  "error": {
    "code": "invalid_input",
    "message": "session_id → String should match pattern '^[a-zA-Z0-9_-]{1,128}$'"
  }
}

常见错误码:

错误码说明
permission_denied无权限执行该操作
tool_disabled工具在配置中被禁用
confirmation_required需要 confirm=true
invalid_input输入参数校验失败
not_found资源不存在
save_failed文件保存失败

页面历史