mcpField
I
infino-ai

infino-ai

本地服务
github.com/infino-ai搜索与检索03 周前更新

关于 infino-ai

Infino MCP 服务可在本地存储、对象存储或 Infino Cloud 数据上执行关键词、语义、混合和 SQL 检索,适用于需要搜索、RAG 或持久记忆的 Agent 与 MCP 客户端。它默认在本地生成查询嵌入,并将数据及索引存为 Parquet。

主要功能

  1. 01关键词、语义、混合和 SQL 搜索
  2. 02连接本地路径与对象存储
  3. 03使用托管的 Infino Cloud 数据库
  4. 04默认在本地生成查询嵌入
  5. 05以 Parquet 存储数据和索引

适用场景

  1. 01搜索本地目录中的文件
  2. 02查询 S3 或 Azure Blob 中的数据
  3. 03为 RAG 应用提供检索能力
  4. 04为 Agent 记忆保存持久数据

MCP 相关

通过 stdio 向兼容 MCP 的客户端提供检索和数据操作能力。客户端配置数据源;连接托管的 Infino Cloud 端点时还需提供 API 密钥。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"infino-ai": {
"command": "npx",
"args": [
"-y",
"@infino-ai/mcp-server"
],
"env": {
"INFINO_MCP_URI": "<INFINO_MCP_URI>",
"INFINO_API_KEY": "<INFINO_API_KEY>",
"INFINO_MCP_EMBED_PROVIDER": "<INFINO_MCP_EMBED_PROVIDER>",
"INFINO_MCP_EMBED_BASE_URL": "<INFINO_MCP_EMBED_BASE_URL>",
"INFINO_MCP_EMBED_API_KEY": "<INFINO_MCP_EMBED_API_KEY>",
"INFINO_MCP_EMBED_MODEL": "<INFINO_MCP_EMBED_MODEL>",
"INFINO_MCP_VALIDATE": "<INFINO_MCP_VALIDATE>"
}
}
}
}
启动命令npx -y @infino-ai/mcp-server
需要配置的环境变量
INFINO_MCP_URIData to serve: a local path, an s3://|az:// bucket URI, or a hosted https://<host>/<database> endpoint (Infino Cloud). Optional — defaults to a durable per-user directory (~/.infino/mcp) so data persists across restarts, falling back to an ephemeral memory:// catalog only if that directory can't be created.
INFINO_API_KEY密钥API key for a hosted (https://) Infino Cloud endpoint. Required when INFINO_MCP_URI is an https:// URI; ignored for local and object-storage connections.
INFINO_MCP_EMBED_PROVIDEREmbedding provider: 'local' (Hugging Face transformers.js, default) or 'openai' (any OpenAI-compatible /embeddings endpoint, including Azure OpenAI's /openai/v1 surface). Inferred as 'openai' when INFINO_MCP_EMBED_BASE_URL is set.
INFINO_MCP_EMBED_BASE_URLBase URL of the OpenAI-compatible embeddings API (e.g. https://api.openai.com/v1 or https://<resource>.openai.azure.com/openai/v1). Required when the provider is 'openai'; the server POSTs to <base>/embeddings.
INFINO_MCP_EMBED_API_KEY密钥API key for the 'openai' provider. Sent as both Authorization: Bearer and api-key so one value works for OpenAI and Azure OpenAI.
INFINO_MCP_EMBED_MODELEmbedding model. local: a Hugging Face feature-extraction model (default Xenova/all-MiniLM-L6-v2, 384-dim). openai: the model/deployment name (e.g. text-embedding-3-small, 1536-dim). Must match the model that produced the table's stored vectors.
INFINO_MCP_VALIDATESet (1/true/yes) to probe the object store at startup, so bad credentials or an unreachable bucket fail then instead of on the first search.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@infino-ai/mcp-server0.16.0

工具

15

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

Infino MCP 服务

npm MCP Registry License: Apache-2.0

这是一个适用于 Infino 的 MCP 服务,可让 AI Agent 通过任何兼容 MCP 的客户端(Claude Code、Claude Desktop、Cursor、VS Code 等),在对象存储中的数据上执行关键词、语义、混合和 SQL 检索,为 RAG、持久化 Agent 记忆以及对自有文件的搜索提供检索层。该服务已发布到 npm,包名为 @infino-ai/mcp-server,并列入官方 MCP Registry,条目为 io.github.infino-ai/mcp-server(并同步至 Smithery、Glama 和 PulseMCP 等目录)。

  • 本地嵌入,无需密钥。 语义搜索使用本地模型对查询进行嵌入,嵌入过程不会让任何数据离开本机。
  • 数据由 Agent 掌控。 所有工具(包括写入工具)始终可用。在 Infino Cloud 上,API 密钥的权限决定连接可以执行哪些操作;每个工具都带有 MCP 注释,客户端可以在执行破坏性调用前征求确认。
  • 本地或托管。 可指定本地路径、自有存储桶(S3、Azure 或任何兼容 S3 的存储),或提供 API 密钥以连接托管的 Infino Cloud 端点。
  • 索引是有效的 Parquet 文件。 表格以纯 Parquet 格式将数据及其搜索索引存储在存储中,可用 DuckDB 或 pyarrow 打开同一个文件。无需导出,也不会被锁定。

目录


要求

  • Node.js ≥ 20(服务以 Node 进程的形式通过 stdio 运行)。
  • 兼容 MCP 的客户端(Claude Code、Claude Desktop、Cursor、VS Code 等)。
  • Infino 可访问的数据——本地目录、环境中已有凭据的存储桶,或提供 API 密钥的托管 Infino Cloud 端点(参见存储后端)。
  • 首次运行时,服务会下载本地嵌入模型(约 90 MB)并缓存;之后进行嵌入时无需联网。

快速开始

服务由 MCP 客户端通过 stdio 启动,正常使用时无需直接运行。每个客户端的配置格式相同:命令为 npx -y @infino-ai/mcp-server,配置通过环境变量提供。将 INFINO_MCP_URI 设为要提供服务的数据位置——本地路径或存储桶 URI。若未设置,服务会使用每位用户专属的持久目录(~/.infino/mcp),以便数据在重启后继续保留;如需提供现有数据,请将 INFINO_MCP_URI 指向自有路径或存储桶。

{
  "command": "npx",
  "args": ["-y", "@infino-ai/mcp-server"],
  "env": {
    "INFINO_MCP_URI": "/Users/me/.infino/memory"
  }
}

若要改为提供托管的 Infino Cloud 数据库,请将 INFINO_MCP_URI 指向 https://<host>/<database> 端点,并提供 API 密钥。其他配置 完全相同:

{
  "command": "npx",
  "args": ["-y", "@infino-ai/mcp-server"],
  "env": {
    "INFINO_MCP_URI": "https://api.platform.infino.ws/my-database",
    "INFINO_API_KEY": "inf_…"
  }
}

下文将说明各客户端要求放置此配置块的确切位置。


Claude Code 插件(一步安装)

对于 Claude Code,此仓库也是一个插件市场。安装插件后,只需一步即可配置 MCP 服务、使用指南技能和 /infino-search 命令,无需编辑 JSON。在 Claude Code 中:

/plugin marketplace add infino-ai/infino-mcp
/plugin install infino@infino-ai

启用时,系统会提示你输入Infino 数据 URI(INFINO_MCP_URI),如果使用 Infino Cloud,还需输入API 密钥。就这么简单:随后即可使用 infino_* 工具、using-infino 技能和 /infino-search <query>。(其他客户端:请使用下方的客户端设置配置。)


客户端设置

Claude Code

使用 CLI 添加服务。使用 --scope user 可在每个项目中使用,使用 --scope project 可将其提交到仓库(写入共享的 .mcp.json);默认范围为 local(仅限此项目)。

claude mcp add infino \
  --scope user \
  -e INFINO_MCP_URI=/Users/me/.infino/memory \
  -- npx -y @infino-ai/mcp-server

使用重复的 -e 标志添加更多选项,例如 -e INFINO_MCP_VALIDATE=true。使用以下命令验证:

claude mcp list
claude mcp get infino
Claude Desktop

编辑配置文件(若文件不存在,则创建),然后完全重启 Claude Desktop。

OS路径
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "infino": {
      "command": "npx",
      "args": ["-y", "@infino-ai/mcp-server"],
      "env": {
        "INFINO_MCP_URI": "/Users/me/.infino/memory"
      }
    }
  }
}
Cursor

将服务添加到 ~/.cursor/mcp.json(适用于所有项目)或 <project>/.cursor/mcp.json(仅限此项目),然后重新加载。格式与 Claude Desktop 相同:

{
  "mcpServers": {
    "infino": {
      "command": "npx",
      "args": ["-y", "@infino-ai/mcp-server"],
      "env": {
        "INFINO_MCP_URI": "/Users/me/.infino/memory"
      }
    }
  }
}
VS Code

VS Code(1.102+)从工作区中的 .vscode/mcp.json(或通过命令面板 → MCP: Open User Configuration 打开用户 mcp.json)读取 MCP 服务。请注意,顶层键为 servers,每个条目都声明 "type": "stdio":

{
  "servers": {
    "infino": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@infino-ai/mcp-server"],
      "env": {
        "INFINO_MCP_URI": "/Users/me/.infino/memory"
      }
    }
  }
}
其他 MCP 客户端

任何支持通过 stdio 使用 MCP 的客户端都可以使用。配置客户端以启动:

command: npx
args:    -y @infino-ai/mcp-server
env:     INFINO_MCP_URI=<path-or-bucket-uri>   (plus any options below)

日志写入 stderr,因此不会破坏 stdout 上的 JSON-RPC 流 — 调试时,请将客户端的日志捕获指向此处。


配置

所有配置都通过环境变量完成 — 无需管理配置文件或命令行标志。

环境变量
变量必填默认值说明
INFINO_MCP_URI否~/.infino/mcp(持久化)要提供服务的数据:本地路径(/Users/me/.infino/memory)、存储桶 URI(s3://…、az://…)或托管端点(https://<host>/<database>,Infino Cloud)。如果未设置,则使用持久的用户目录(~/.infino/mcp),以便数据在重启后保留;只有在无法创建该目录时,才会回退到临时的进程内目录(memory://)。
INFINO_API_KEY使用托管 URI 时—托管 https:// 端点的 API 密钥(inf_…)。当 INFINO_MCP_URI 是 https:// URI 时必填;本地连接和对象存储连接会忽略此项。
INFINO_MCP_EMBED_PROVIDER否local嵌入提供方:local(Hugging Face transformers.js,无需密钥,任何数据都不会离开本机)或 openai(任何兼容 OpenAI 的 /embeddings 端点——OpenAI、Azure OpenAI 的 /openai/v1 接口,或兼容服务)。如果设置了 INFINO_MCP_EMBED_BASE_URL,则会推断为 openai。
INFINO_MCP_EMBED_BASE_URL使用 openai 时—兼容 OpenAI 的嵌入 API 基础 URL,例如 https://api.openai.com/v1 或 https://<resource>.openai.azure.com/openai/v1。服务会向 <base>/embeddings 发送 POST 请求。
INFINO_MCP_EMBED_API_KEY否—openai 提供方的 API 密钥。密钥会同时通过 Authorization: Bearer 和 api-key 发送,因此同一个值可用于 OpenAI 和 Azure OpenAI。对于无需身份验证或使用环境身份的端点,可省略此项。
INFINO_MCP_EMBED_MODEL否Xenova/all-MiniLM-L6-v2(local)· text-embedding-3-small(openai)嵌入模型。对于 local,这是 Hugging Face 特征提取模型;对于 openai,这是模型或部署名称。必须与生成表中已存储向量的模型一致,因此也必须与向量索引维度一致(例如,text-embedding-3-small 为 1536 维;默认本地模型为 384 维)。
INFINO_MCP_VALIDATE否关闭设置为 1/true/yes 时,会在启动时探测对象存储,使错误凭据或无法访问的存储桶在此时就报错,而不是等到首次搜索时才报错。

云凭据从标准提供方环境变量中读取——服务会将它们映射到存储配置,不会引入自己的凭据变量。完全省略这些变量即可使用环境身份(IAM 实例角色或 Azure 托管身份)。

提供使用 OpenAI / Azure OpenAI 嵌入的目录。 如果表格使用托管嵌入模型而非本地默认模型进行向量化,请将服务指向同一模型,以确保查询向量与文档向量一致:

"env": {
  "INFINO_MCP_URI": "s3://my-bucket/infino",
  "INFINO_MCP_EMBED_PROVIDER": "openai",
  "INFINO_MCP_EMBED_BASE_URL": "https://my-resource.openai.azure.com/openai/v1",
  "INFINO_MCP_EMBED_API_KEY": "…",
  "INFINO_MCP_EMBED_MODEL": "text-embedding-3-small"
}

模型必须与生成已存储向量的模型一致——不匹配会导致相似度结果毫无意义或出现维度错误。关键词搜索和 SQL 搜索不受嵌入模型影响。

后端凭据
AWS S3AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY(如果使用,还包括 AWS_SESSION_TOKEN、AWS_REGION)
兼容 S3 的存储(R2/MinIO/B2)AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_ENDPOINT_URL
Azure BlobAZURE_STORAGE_ACCOUNT、AZURE_STORAGE_KEY
Infino Cloud(托管)INFINO_API_KEY——无需对象存储凭据(存储由平台管理)
存储后端
// Local directory
"env": { "INFINO_MCP_URI": "/Users/me/.infino/memory" }

// AWS S3 — ambient AWS_* credentials, default endpoint
"env": {
  "INFINO_MCP_URI": "s3://my-bucket/infino",
  "AWS_ACCESS_KEY_ID": "…",
  "AWS_SECRET_ACCESS_KEY": "…"
}

// S3-compatible (Cloudflare R2 / MinIO / Backblaze B2) — custom endpoint
"env": {
  "INFINO_MCP_URI": "s3://my-bucket/infino",
  "AWS_ENDPOINT_URL": "https://<account>.r2.cloudflarestorage.com",
  "AWS_ACCESS_KEY_ID": "…",
  "AWS_SECRET_ACCESS_KEY": "…"
}

// Azure Blob
"env": {
  "INFINO_MCP_URI": "az://my-container/infino",
  "AZURE_STORAGE_ACCOUNT": "…",
  "AZURE_STORAGE_KEY": "…"
}

// Infino Cloud (hosted) — the database is the last path segment
"env": {
  "INFINO_MCP_URI": "https://api.platform.infino.ws/my-database",
  "INFINO_API_KEY": "inf_…"
}

使用托管连接时,搜索、SQL 和写入工具的行为与本地使用时完全相同——唯一的区别是数据存储的位置。压缩和垃圾回收由服务端处理,因此不会作为客户端操作提供。请注意,语义搜索和混合搜索仍会在此服务中本地嵌入查询,因此 INFINO_MCP_EMBED_MODEL 必须与生成托管表中已存储向量的模型一致(请参阅上文关于 OpenAI / Azure OpenAI 的说明)——尤其是在由其他人导入数据时,这一点很重要。


工具

工具参数功能
infino_semantic_searchtable、query、k、column?、vectorColumn?、columns?、filter?按含义查找段落——使用本地模型对查询进行嵌入(无需密钥),并按向量相似度排序。可处理释义和同义词。score 表示距离(越小越接近)。可选的 filter({column, query, mode?})会先将排序范围限制为关键字列匹配的行(下推预筛选)。可选的 columns 用于选择每条命中结果返回的字段(例如用于引用的路径和行范围);默认返回文本列,并始终包含 _id 和 score。
infino_keyword_searchtable、query、k、column?、mode?、columns?BM25 全文搜索——适用于精确术语、标识符、错误代码和产品名称。score 表示相关性(越高越好)。mode 为 or(默认)或 and。
infino_hybrid_searchtable、query、k、column?、vectorColumn?、mode?、columns?在一次排序中融合关键字搜索与语义搜索——将文本列上的 BM25 与向量相似度结合,因此同时匹配字面术语和含义的行排名最高。score 表示融合排名(越高越好)。
infino_token_matchtable、query、column?、mode?、limit?不排序的关键字筛选——返回文本列包含指定词元的行集合。需要匹配结果而非相关性排序时使用。
infino_exact_matchtable、value、column?、limit?对索引列(标签、状态、ID 字符串)进行不排序的精确相等筛选。
infino_counttable、query、column?、mode?统计匹配关键字查询的行数,无需获取这些行——快速统计文本列中的匹配项。若要获取匹配行,请使用 infino_keyword_search 或 infino_token_match。
infino_sqlquery、embed?用于计数、筛选、联接和聚合的 SQL。引擎的搜索表函数可在其中调用;{{name}} 占位符会替换为 embed[name] 的向量。支持任意单条语句,包括 DDL/DML。
infino_list_tables—列出已连接目录中的表。
infino_describe_tabletable获取表的列名和类型。
infino_create_database—在连接指定的位置创建数据库(Infino Cloud);在本地执行时则为空操作并返回成功。此操作幂等。
infino_create_tabletable、columns、fts?、vector?根据 {column: type} 描述符创建表。在 fts 指定的列上创建全文索引(默认:所有 large_utf8 列)。vector: true 会添加一个大小与服务端嵌入器相匹配的 embedding 列,并创建余弦索引。
infino_drop_tabletable、purge?删除表,并默认删除其存储对象;purge: false 则仅注销表名。
infino_add_documentstable、documents追加行(一次调用即一次提交)。没有向量的行会从文本列生成嵌入,并一次性批量处理;结果会报告 appended 和 embedded。使用非列名的键会导致错误。
infino_update_documentstable、predicate、documents用新文档按 1:1 替换匹配 SQL 谓词的行(缺失的向量会生成嵌入)。仅适用于持久化存储。
infino_delete_documentstable、predicate删除匹配 SQL 谓词的行。仅适用于持久化存储。
搜索命中会返回完整列值——columns 参数是直接传给引擎(嵌入式或托管式)的投影,因此表中的任意列都会随每条命中一起返回:["id"] 可在 k 较大时获得精简的命中结果,["id", "text"] 可在返回 id 的同时附带完整文本以供引用,也可以返回元数据列用于筛选。默认投影文本列,_id 和 score 始终包含在内,并且绝不会截断任何内容;若要缩小结果,请投影更少的列或使用更小的 k。每个搜索响应还会携带 score_kind,说明其 score 是距离(语义搜索:越低越接近)还是相关性(关键词和混合搜索:越高越好)。

对于普通检索,优先使用专用搜索工具,它们会为你完成嵌入和投影。infino_sql 用于筛选、联接和聚合,包括对搜索表值函数结果进行操作,因此一条查询就能同时完成排序和聚合。

写入数据

Agent 遵循的写入流程,每一步调用一次工具并提交一次:

  1. 如果托管数据库返回 404,则调用 infino_create_database。
  2. 调用 infino_create_table,使用 utf8 键列、large_utf8 文本列,并为语义搜索设置 vector: true。服务端会根据其嵌入器确定向量列的大小;Agent 无需输入维度。保留返回结果:其中的 indexes 字段是唯一记录哪些列已建立索引的地方。
  3. 调用 infino_add_documents,每次写入数十行,并始终包含键。缺失的向量会批量嵌入。
  4. 若要替换行,请按键谓词调用 infino_delete_documents,然后再次添加。若要删除行,请先用 infino_count 检查谓词。

一次工具调用可携带数十个文档。对于整个语料库,请使用 infino CLI(infino ingest 可通过相同 URI 导入 Parquet 或 NDJSON)或 SDK。与引擎一样,CLI 要求自行提供向量,因此请在行中包含 embedding 列,或加载文本并按关键词搜索。

服务端没有写入权限门控机制,已弃用的 INFINO_MCP_ENABLE_WRITES 变量也会被忽略(若设置了该变量,服务会在 stderr 中说明)。在 Infino Cloud 上,API 密钥的权限决定连接可执行的操作:只读密钥的所有写入都会被拒绝,工具结果会提示创建具有写入权限的密钥。在本地,请确保服务仅指向 Agent 可以修改的数据。


安全与数据处理

此服务在本地运行,与客户端位于同一设备上,数据和凭据均保存在用户的设备上。

  • 本地执行,不监听入站连接。 它作为 MCP 客户端的子进程通过 stdio 运行,不会打开网络监听器。在默认的本地/存储桶模式下,它不会联系任何远程服务。如果 INFINO_MCP_URI 是托管的 https:// 端点,它会向该端点发起 出站 TLS 调用,以处理搜索、SQL 和(如果启用)写入操作——这些请求中的数据会到达你配置的托管服务,仅此而已。
  • 默认情况下不会发送数据用于生成嵌入。 使用默认提供方时,查询和文档嵌入由本地模型完成,因此文本不会发送到第三方嵌入 API,也无需配置或担心泄露嵌入 API 密钥。在托管模式下,只有生成的向量会到达 Infino Cloud 端点,文本不会。如果你配置了兼容 OpenAI 的提供方,待嵌入的文本会发送到你指定的端点。
  • 凭据保留在环境中。 存储凭据(AWS_*/AZURE_*)和托管 API 密钥(INFINO_API_KEY)从环境变量中读取,仅用于访问你配置的存储或端点。它们绝不会被记录到日志中,也不会在工具输出中返回。
  • 写入权限由服务外部决定。 Agent 始终可以使用完整的工具集,包括写入工具。在 Infino Cloud 上,API 密钥的权限会限制连接可执行的操作(只读密钥的所有写入都会被拒绝)。在本地,只将 Agent 可修改的数据指向该服务。每个工具都带有 MCP 注释(readOnlyHint、destructiveHint),因此客户端可以按自身规则请求确认。
  • 遵循最小权限原则。 将 INFINO_MCP_URI 指向任务所需的最小数据集,并提供权限仅限于该存储桶/前缀的存储凭据。

检索的工作原理

语义搜索使用 Hugging Face transformers.js 在本地生成嵌入(默认使用 all-MiniLM-L6-v2,维度为 384;可通过 INFINO_MCP_EMBED_MODEL 覆盖)。服务使用同一模型为导入的文档(通过 infino_add_documents)和你的查询生成嵌入,使它们位于相同的向量空间中。

如果更改 INFINO_MCP_EMBED_MODEL,表的向量索引必须与新模型的维度匹配——不同模型生成的嵌入不可比较,维度不匹配会导致搜索失败。


故障排除

症状可能的原因/解决方法
客户端未显示 Infino 工具服务未启动——检查客户端的 MCP 日志(stderr)。确认 npx 位于 PATH 中,并且已设置 INFINO_MCP_URI。编辑配置后,请完全重启客户端。
INFINO_MCP_URI is required环境变量未传递到子进程。在图形界面客户端中,环境变量必须放在服务的 env 块中(进程不会继承你的 shell 环境)。
写入提示密钥“was rejected or lacks write capability”在 Infino Cloud 上,API 密钥为只读权限(HTTP 403)或密钥有误。创建具有写入权限的密钥,并使用该密钥重启服务。
写入提示“another writer won the commit race”两个写入方同时操作同一张表,且此次调用未能提交。请重新发起调用。
首次查询速度较慢需要一次性下载嵌入模型(约 90 MB)。后续运行会使用缓存。
访问托管的 https:// URI 时出现身份验证错误INFINO_API_KEY 缺失、有误,或无权访问该数据库。确认密钥(inf_…)正确,并确认 URI 的最后一个路径段是你有权访问的数据库。
语义搜索出现维度/向量错误表的向量索引与嵌入模型的维度不匹配。请重新导入数据,或将 INFINO_MCP_EMBED_MODEL 设为创建索引时使用的模型。

本地开发

服务器依赖已发布的 @infino-ai/infino Node 绑定,它与其他依赖一样通过公共 npm 解析。

npm install
npm run build
INFINO_MCP_URI=/path/to/data node dist/index.js   # runs on stdio

将客户端配置为通过 stdio 连接到 node /absolute/path/dist/index.js,以试用本地构建;也可以使用 MCP Inspector:

npx @modelcontextprotocol/inspector node dist/index.js

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。