mcpField
S
ScreenshotAPI

ScreenshotAPI

本地服务
screenshotapi.net浏览器自动化02 天前更新

关于 ScreenshotAPI

ScreenshotAPI 的官方 MCP 服务,为需要读取和保存网页内容的 Agent 提供截图、PDF、网页抓取、滚动视频及批量捕获,并可将截图作为图像返回。

主要功能

  1. 01网页截图并返回图像
  2. 02URL 或 HTML 转 PDF
  3. 03执行 JavaScript 后抓取页面
  4. 04录制页面滚动视频
  5. 05批量提交截图并查询状态

适用场景

  1. 01检查网页在不同视口和深色模式下的外观
  2. 02将网页或 HTML 发票保存为 PDF
  3. 03提取动态网页的文本或 HTML
  4. 04批量捕获多个网站并检查任务结果

MCP 相关

作为 MCP 服务,它向兼容客户端提供 8 个调用 ScreenshotAPI REST API 的工具,涵盖渲染、抓取和批量任务。需要配置 ScreenshotAPI API 密钥。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"screenshot-api-screenshot": {
"command": "npx",
"args": [
"-y",
"@screenshotapinet/mcp"
],
"env": {
"SCREENSHOTAPI_TOKEN": "<SCREENSHOTAPI_TOKEN>",
"SCREENSHOTAPI_REQUEST_TIMEOUT_MS": "<SCREENSHOTAPI_REQUEST_TIMEOUT_MS>",
"SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTES": "<SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTES>"
}
}
}
}
启动命令npx -y @screenshotapinet/mcp
需要配置的环境变量
SCREENSHOTAPI_TOKEN密钥Your ScreenshotAPI API key from https://app.screenshotapi.net
SCREENSHOTAPI_REQUEST_TIMEOUT_MSRequest timeout in milliseconds (default 180000)
SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTESMax screenshot size returned inline as an image (default 3500000)

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

安装包
npm@screenshotapinet/mcp1.0.2

工具

8

收录的工具列表 · 更新于 1 天前

参数类型必填说明
jsstring否捕获前在页面中执行的 JavaScript,例如:"document.querySelector('.popup').remove();"。
cssstring否捕获前注入的 CSS,例如:'.header { display: none; }'。
ttlinteger否enable_caching 为 true 时的缓存有效期(秒)。默认值为 2592000(30 天)。
urlstring否要渲染的网站 URL,需包含协议,例如 'https://example.com'。url 和 custom_html 必须提供其一。
byobboolean否将输出保存到仪表板中 Storage Integrations 下配置的自有存储桶(Bring Your Own Bucket)。默认值为 false。
clipobject否仅截取页面的此矩形区域。
clip.xinteger是左边缘位置(像素)。
clip.yinteger是上边缘位置(像素)。
clip.widthinteger是区域宽度(像素)。
clip.heightinteger是区域高度(像素)。
blockarray否渲染时要屏蔽的资源。要获得干净的截图,请使用 ['ads', 'cookie_banners', 'chat_widgets']。'tracking' 会屏蔽分析请求。'javascript'、'stylesheets'、'xhr' 和 'fetch' 可能导致页面故障或隐藏内容,仅在必要时使用。其他选项:images、media(音频/视频)、fonts、text_tracks、event_source、websockets、manifest。
delayinteger否页面加载后、截图前额外等待的时间(毫秒)。默认值为 0。动画、图表或延迟加载的内容可设置为 1000-5000。
freshboolean否true(默认值)始终渲染新截图;false 则在存在使用 enable_caching=true 且参数完全相同的请求所生成的缓存截图时返回该截图。
proxystring否用于转发请求的代理:'address:port' 或 'username:password@address:port'(http:// 前缀也可接受)。适用于获取特定地区的内容或访问容易触发 CAPTCHA 的网站。
sizesarray否在一次请求中以多种视口尺寸截取页面,例如 [{width:1920,height:1080},{width:768,height:1024},{width:390,height:844}]。此参数会覆盖 width/height。每种尺寸返回一张托管图片;此模式下图片不会以内嵌形式显示。
widthinteger否浏览器视口宽度(像素,最大 7680)。默认值为 1680。约 390 可模拟手机,约 768 可模拟平板电脑。
heightinteger否浏览器视口高度(像素,最大 4320)。默认值为 876。
js_urlstring否要在截图前执行的外部 JavaScript 文件的 URL。
retinaboolean否以 2 倍像素密度渲染,生成更清晰、更大的图片。默认值为 false。
cookiesstring否加载前要设置的 Cookie,格式为 'name=value; other=value;'。用于需要登录的页面。
css_urlstring否捕获前要注入的外部样式表 URL。
headersstring否额外的 HTTP 标头,使用 'Name: value;' 键值对,并以分号分隔,例如 'Authorization: Bearer abc; X-Test: 1;'。
timeoutinteger否API 等待页面加载后中止的最长时间,单位为毫秒。默认值为 100000。
latitudenumber否浏览器 Geolocation API 报告的纬度。
selectorstring否要捕获的单个元素的 CSS 选择器,而非视口,例如 '#pricing' 或 '.product-card'。
timezonestring否要模拟的 IANA 时区,例如 'America/New_York'、'Asia/Karachi'。默认使用服务端时区。
dark_modeboolean否使用深色配色方案渲染(适用于支持该方案的网站)。默认值为 false。
file_typeenum否图像格式。默认值为 png。jpg 文件最小(参见 image_quality);webp 在大小和质量之间取得平衡。要生成 PDF,请使用 generate_pdf。png | jpg | webp
full_pageboolean否捕获整个可滚动页面,而不只是视口。默认值为 false。对于包含延迟加载图像的页面,可与 lazy_load 结合使用。
grayscaleinteger否降低输出的饱和度,范围为 0(全彩,默认值)到 100(完全灰度)。
lazy_loadboolean否先滚动浏览整个页面,使延迟加载的图像和版块完成渲染。默认值为 false。
longitudenumber否浏览器 Geolocation API 报告的经度。
save_pathstring否可选的本地保存路径,例如 './shots/home.png'。如果指定目录路径(以 '/' 结尾或为现有目录),则保留远程文件名。相对路径以 MCP 服务的工作目录为基准解析。
adjust_topinteger否捕获前将视口向下滚动指定像素数。默认值为 0。PDF 不支持此选项。
user_agentstring否自定义 User-Agent 字符串,例如使用移动版 Safari UA 获取移动网站。
bucket_namestring否当同一服务下配置了多个存储桶时,指定 byob 使用的存储桶。
custom_htmlstring否要渲染的原始 HTML,而非加载 URL。其优先级高于 url。HTML 中的内联 CSS 和 JavaScript 会生效。适用于无法公开访问的页面。
template_idstring否ScreenshotAPI 控制面板中已保存的 Cookie 模板 ID,在导航前应用。
scroll_delayinteger否lazy_load 为 true 时,滚动步骤之间的等待时间,单位为毫秒。默认值为 500。长页面设置较高的值可能会导致超时。
blur_selectorstring否要模糊处理的元素 CSS 选择器,多个选择器以逗号分隔——用于遮盖电子邮件、账号或其他敏感数据。
image_qualityinteger否JPEG 压缩质量,范围为 0–100(仅适用于 jpg)。默认值为 80。
include_imageboolean否在工具结果中以内嵌形式返回图像,以便查看。默认值为 true;full_page 为 true 时默认值为 false。超过 SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTES(默认 3500000 字节)的图像仅以 URL 返回。
enable_cachingboolean否将此截图存入缓存以供重复使用。之后通过 fresh=false 提供缓存截图时不会消耗额度。默认值为 false。
wait_for_eventenum否截图前要等待的页面生命周期事件。'load'(默认值)会等待所有资源加载完成;'domcontentloaded' 速度更快,但可能遗漏图像;'networkidle' 会等待 500ms,直到没有网络请求——最适合 SPA 和仪表板。load | domcontentloaded | networkidle
click_recursioninteger否按顺序点击 selector_to_click 的次数。需要设置 selector_to_click。默认值为 0。
omit_backgroundboolean否将纯白色或纯色的页面背景设为透明(仅适用于 png)。默认值为 false。
remove_selectorstring否截图前从页面移除元素的 CSS 选择器,多个选择器以逗号分隔,例如 '.ad-banner, #sidebar'。不匹配的选择器将被忽略。
storage_servicestring否配置了多个存储服务时,指定与 byob 搭配使用的存储服务:'aws'、'wasabi' 或 'google_cloud'。
thumbnail_widthinteger否将输出调整为此像素宽度,同时保持纵横比。适用于预览,也有助于缩小内嵌图像。
accept_languagesstring否用于本地化内容的 Accept-Language 标头,例如 'fr-FR,fr;q=0.9'。默认值为 'en-US,en;q=0.8'。
enable_incognitoboolean否在隔离的无痕会话中渲染,不保留 Cookie 或存储数据。默认值为 false。
result_file_namestring否为存储的输出自定义文件名。非唯一名称可能会覆盖之前的文件。
scroll_to_elementstring否视口截图前,要滚动到可视区域内的元素的 CSS 选择器。
selector_to_clickstring否截图前要点击的元素的 CSS 选择器,例如用于打开标签页、下拉菜单或折叠面板。
block_specific_requestsstring否要拦截的特定请求 URL 或模式,以逗号、空格或换行符分隔,例如 'https://example.com/api/data, https://ads-domain.com'。

详细介绍

ScreenshotAPI MCP 服务

npm 版本 GitHub Node.js 许可证

ScreenshotAPI 的官方 MCP 服务。它为你的 AI 助手提供 8 个工具,可用于网页截图、将 URL 和 HTML 转换为 PDF、录制滚动视频、感知 JavaScript 的网页抓取(Markdown、文本、HTML)以及批量截取。你只需用日常语言提出请求,服务就会调用 API。助手还会收到截图作为图像,因此可以查看它截取的页面。

兼容 Claude Desktop、Claude Code、Cursor、Windsurf、VS Code、Cline、Codex 以及任何其他兼容 MCP 的客户端。

项目值
软件包@screenshotapinet/mcp
传输方式stdio
Node.js>=18

快速开始

  1. 注册 ScreenshotAPI,并从控制面板复制你的 API 密钥。

  2. Cursor 用户可以一键安装:

    添加到 Cursor

  3. 其他用户:将以下内容添加到 MCP 客户端配置中(确切的文件路径请参阅按客户端安装):

{
  "mcpServers": {
    "screenshotapi": {
      "command": "npx",
      "args": ["-y", "@screenshotapinet/mcp"],
      "env": {
        "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
      }
    }
  }
}
  1. 重启客户端。

  2. 测试:询问 “截取 https://example.com 的屏幕截图”

目录

按客户端安装

要求
  • Node.js 18 或更高版本
  • 终端中可使用 npx
  • ScreenshotAPI API 密钥(注册)
Claude Desktop

添加到 claude_desktop_config.json(设置 → 开发者 → 编辑配置):

{
  "mcpServers": {
    "screenshotapi": {
      "command": "npx",
      "args": ["-y", "@screenshotapinet/mcp"],
      "env": {
        "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
      }
    }
  }
}

保存后重启 Claude Desktop。

Claude Code
claude mcp add screenshotapi --env SCREENSHOTAPI_TOKEN=<YOUR_API_KEY> -- npx -y @screenshotapinet/mcp

添加服务后,启动新的 Claude Code 会话。

Cursor

一键安装:

添加到 Cursor

或者手动添加到 .cursor/mcp.json:

{
  "mcpServers": {
    "screenshotapi": {
      "command": "npx",
      "args": ["-y", "@screenshotapinet/mcp"],
      "env": {
        "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
      }
    }
  }
}

保存后重启 Cursor。

Windsurf

添加到 ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "screenshotapi": {
      "command": "npx",
      "args": ["-y", "@screenshotapinet/mcp"],
      "env": {
        "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
      }
    }
  }
}

保存后重启 Windsurf。

VS Code / GitHub Copilot

添加到 VS Code 的 settings.json:

{
  "mcp": {
    "servers": {
      "screenshotapi": {
        "command": "npx",
        "args": ["-y", "@screenshotapinet/mcp"],
        "env": {
          "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
        }
      }
    }
  }
}

保存后重启 VS Code。

Cline

打开 MCP Servers 面板 → 配置 → 高级 MCP 设置。将以下内容添加到 cline_mcp_settings.json:

{
  "mcpServers": {
    "screenshotapi": {
      "command": "npx",
      "args": ["-y", "@screenshotapinet/mcp"],
      "env": {
        "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
      }
    }
  }
}

保存后重启 Cline。

Codex CLI
codex mcp add screenshotapi --env SCREENSHOTAPI_TOKEN=<YOUR_API_KEY> -- npx -y @screenshotapinet/mcp
codex mcp list

添加服务后,启动新的 Codex 会话。

任何其他 MCP 客户端

使用此配置:

{
  "command": "npx",
  "args": ["-y", "@screenshotapinet/mcp"],
  "env": {
    "SCREENSHOTAPI_TOKEN": "<YOUR_API_KEY>"
  }
}

验证运行情况

设置完成后,试试以下操作:

提示词预期工具
截取 https://example.com 的屏幕截图take_screenshot
在 iPhone 尺寸的屏幕上以深色模式截取 stripe.com 的屏幕截图使用 width、dark_mode 的 take_screenshot
截取 https://news.ycombinator.com 的完整页面,并屏蔽广告使用 full_page、block 的 take_screenshot
将 https://example.com/invoice 保存为 A4 PDF,文件路径为 ./invoice.pdf使用 format、save_path 的 generate_pdf
阅读 https://react.dev/learn 并总结内容scrape_page
为 https://apple.com 制作 10 秒的滚动 GIFrecord_scrolling_video
截取这 5 个竞争对手首页的屏幕截图bulk_screenshots
批量任务 1f2e... 完成了吗?get_bulk_status

工具参考

全部 8 个工具都封装了 ScreenshotAPI REST API。渲染工具(take_screenshot、generate_pdf、scrape_page、record_scrolling_video)会调用 GET https://shot.screenshotapi.net/v3/screenshot,并使用 output=json,且共用以下页面准备选项。每个工具都接受 url 或 custom_html。

共用渲染选项
分组参数
视口width(默认值 1680,最大值 7680)、height(默认值 876,最大值 4320)
时序delay、wait_for_event(load / domcontentloaded / networkidle)、lazy_load、scroll_delay、timeout
页面操作css、css_url、js、js_url、remove_selector、blur_selector、selector_to_click、click_recursion、scroll_to_element、adjust_top
屏蔽block(列表:ads、tracking、cookie_banners、chat_widgets、javascript、stylesheets、images、media、fonts、text_tracks、xhr、fetch、event_source、websockets、manifest)、block_specific_requests
模拟dark_mode、grayscale(0-100)、enable_incognito、user_agent、accept_languages、headers、cookies、template_id、proxy、latitude、longitude、timezone
缓存fresh、enable_caching、ttl(仅限屏幕截图和 PDF)
存储result_file_name、byob、storage_service、bucket_name(仅限屏幕截图和 PDF)
take_screenshot

将页面捕获为图像并返回托管图像 URL。图像也会以内嵌形式返回,以便助手查看。整页截图是例外,因为通常太高而无法查看;传入 include_image=true 即可将其以内嵌形式返回。

参数必填说明
url二选一要捕获的 URL
custom_html二选一要渲染的原始 HTML,不使用 URL
file_type否png(默认)、jpg、webp
full_page否捕获整个可滚动页面。默认值为 false
retina否2 倍像素密度。默认值为 false
image_quality否JPEG 质量,范围为 0-100。默认值为 80
omit_background否为纯背景页面设置透明背景(仅限 PNG)
thumbnail_width否将输出调整为此宽度,同时保持宽高比
selector否按 CSS 选择器捕获单个元素
clip否捕获一个矩形区域:{ x, y, width, height }
sizes否在一个请求中按多个视口尺寸捕获:[{ width, height }, ...]
include_image否以内嵌形式返回图像。默认值为 true;设置 full_page 时默认值为 false
save_path否同时将文件保存到本地

以及所有共享渲染选项。

generate_pdf

将 URL 或原始 HTML 转换为 PDF,并返回托管 PDF URL。如果未指定 format(且未指定 width/height),则整个页面会转换为一个连续的 PDF 页面。

参数必填说明
url二选一要转换的 URL
custom_html二选一要转换的原始 HTML
format否A0–A6、Letter、Legal、Tabloid、Ledger
landscape否横向。默认值为 false
page_range否仅保留这些页面,例如 1-3
print_background否包含背景颜色和图像
media否print 或 screen CSS
save_path否同时将 PDF 保存到本地

以及所有共享渲染选项。

scrape_page

在真实浏览器中渲染页面,因此会先运行 JavaScript,然后提取页面内容。服务会下载提取出的文件,并以内嵌方式返回其内容。相同请求中还会截取屏幕截图。

参数必填描述
url二选一要抓取的 URL
custom_html二选一要处理的原始 HTML
extract否可选值:markdown、text、html、image_urls。默认值为 markdown
include_content否是否以内嵌方式返回提取出的内容。默认值为 true
max_content_chars否每个提取文件的截断字符数。默认值为 50000

另外还支持视口、计时、页面操作、拦截和模拟选项。

record_scrolling_video

录制浏览器向下滚动页面的过程,并返回托管视频的 URL。

参数必填描述
url二选一要录制的 URL
custom_html二选一要录制的原始 HTML
file_type否mp4(默认值)、webm、gif
scroll_speed否slow、normal(默认值)、fast
duration否秒数,范围为 0-60
scroll_back否结束时滚回顶部
start_immediately否在页面加载完成前开始录制
video否录制视口画面,时长为 duration 秒,不进行滚动
sizes否在多种视口尺寸下录制:[{ width, height }, ...],最多 10 种
save_path否同时在本地保存视频(仅支持单一尺寸)

另外还支持视口、计时、页面操作、拦截和模拟选项。

bulk_screenshots

POST https://api.screenshotapi.net/v1/bulk/json 可将最多 50 个 URL 作为一个任务提交。仅限付费套餐使用。

参数必填描述
screenshots是[{ url, ...options }]。选项使用原始 API 名称(file_type、width、full_page、block_ads 等)
defaults否应用于每个条目的选项,除非条目自行覆盖
bulk_screenshots_csv

POST https://api.screenshotapi.net/v1/bulk/csv 会上传一个包含 url 列的 CSV。其他列均为对应行的渲染选项。仅限付费套餐使用。

参数必填描述
csv_path二选一本地 CSV 文件的路径
csv_content二选一CSV 文本
get_bulk_status

GET https://api.screenshotapi.net/v1/bulk/csv/status 会返回任务的 percent_complete、successful_urls 和 failed_urls。

参数必填描述
uuid是任务 uuid
download_bulk_results

GET https://api.screenshotapi.net/v1/bulk/csv/download 每个 URL 返回一行,包含 url、status、screenshot 和 error_message。

ParameterRequiredDescription
uuidYes作业 uuid

提示词示例

截图
PDF
抓取
视频
  • 录制 https://stripe.com 的慢速滚动 MP4,并在最后滚回顶部。
  • 以桌面端和移动端尺寸为我们的着陆页制作滚动 GIF。
批量
  • 为这 20 个 URL 截图,尺寸为 1440x900,并隐藏 Cookie 横幅。
  • 我的批量作业状态如何?完成后下载结果。

错误代码

工具调用不会导致服务崩溃。上游错误会以结构化工具结果的形式返回,其中包含 error、code、message 和 guidance 字段,以便客户端解释问题并建议解决方法。

CodeMeaning
310目标 URL 重定向次数过多
400参数无效(URL、文件类型、代理、地理位置、CSS/JS URL、裁剪区域、模板)或目标 SSL 问题
401缺少或无效的 SCREENSHOTAPI_TOKEN,或订阅未激活
402因欠费或用量超过套餐配额两倍而暂停服务
403截图配额已用尽、试用期已结束,或目标拒绝连接
404账户未订阅套餐或未开通试用
407代理隧道连接失败
408页面渲染耗时过长
429每分钟请求次数过多
444目标网站关闭了连接或未返回任何内容
495目标网站的 SSL/TLS 版本或加密套件不匹配
499此服务停止等待 API 响应(参见 SCREENSHOTAPI_REQUEST_TIMEOUT_MS)
500ScreenshotAPI 内部错误,可安全重试
502服务无法连接到 ScreenshotAPI
503ScreenshotAPI 或目标页面暂时不可用

缺少 URL 时的错误结果示例:

{
  "error": "url_required",
  "code": 400,
  "message": "Provide either 'url' or 'custom_html'.",
  "guidance": "Pass a fully qualified URL including the protocol, e.g. 'https://example.com', or pass custom_html instead."
}

完整列表请参阅 ScreenshotAPI 错误文档。

工作原理

这是一个封装 ScreenshotAPI REST API 的 stdio MCP 服务。

运行时:

  1. MCP 客户端通过 npx 启动服务进程。
  2. 客户端读取工具列表。
  3. 当提示词匹配某个工具时,客户端会调用该工具。
  4. 服务会验证输入,使用 output=json 调用 ScreenshotAPI,并返回包含托管文件 URL 的结构化 JSON。
  5. 对于截图,服务还会下载图像并以内联方式返回。对于抓取任务,服务会下载提取出的 Markdown、文本或 HTML,并返回其内容。

每次调用时都会从环境中读取 API 密钥,并将其作为 token 参数发送。服务会在响应到达模型之前,从每个响应中移除令牌。对于值非常长的请求(例如大型 custom_html),会使用包含 JSON 正文的 POST 请求,以避免 URL 长度限制。

环境变量

变量必填默认值描述
SCREENSHOTAPI_TOKEN是你的 ScreenshotAPI API 密钥
SCREENSHOTAPI_REQUEST_TIMEOUT_MS否180000上游请求超时时间(毫秒)
SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTES否3500000内联返回给模型的最大截图大小

从源代码构建

git clone https://github.com/Screenshot-API/screenshot-mcp.git
cd screenshot-mcp
npm install
npm run build

直接运行:

SCREENSHOTAPI_TOKEN=<YOUR_KEY> node dist/cli.js

使用 MCP Inspector 检查:

SCREENSHOTAPI_TOKEN=<YOUR_KEY> npx @modelcontextprotocol/inspector node dist/cli.js

故障排除

更新后客户端仍使用旧工具列表: 重启客户端,并确认其加载了最新的 npm 版本。

401 token_required: SCREENSHOTAPI_TOKEN 未在 MCP 客户端配置的 env 块中设置。

401 invalid_token: 密钥错误,或已在控制面板中轮换。请从控制面板复制当前密钥。

截图以 URL 返回,但没有图像: 图像大小超过 SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTES,或者这是一次 full_page 截取。请使用 thumbnail_width、降低 image_quality 的 jpg,或设置 include_image=true。

页面空白或仅部分加载: 添加 delay(例如 3000),使用 wait_for_event=networkidle,或为包含延迟加载图像的页面设置 lazy_load=true。

截图中出现 Cookie 横幅或弹窗: 传入 block: ["cookie_banners", "ads", "chat_widgets"],或使用 remove_selector 移除特定元素。

遇到 CAPTCHA 或机器人拦截: 通过住宅代理 proxy 路由请求。请参阅代理文档。

超时: 页面加载缓慢时,可能需要提高 timeout(API 端,默认 100000 ms)和 SCREENSHOTAPI_REQUEST_TIMEOUT_MS(此服务,默认 180000 ms)。某些 MCP 客户端也有自己的工具调用超时时间。

链接

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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