FieldCure MCP基础知识
 
特性
- 20个必备工具 --HTTP、网络搜索和获取、URL文件下载、运行时搜索引擎切换(获取/设置)、Wolfram|Alpha、shell、JavaScript沙箱、环境信息、文件读/写/搜索、持久内存+类别搜索(新闻、图像、学者、专利)
- 零配置 -默认必应搜索不需要API密钥;可选API密钥解锁Serper、Tavily、SerpApi(+类别搜索工具)和Wolfram|Alpha
- 文档分析 —
web_fetch和read_file将PDF、DOCX、HWPX、PPTX、XLSX中的文本提取到Markdown中。PDF文本提取仅限于文本层;没有文本层的扫描PDF会产生空文本。用于OCR支持的索引使用fieldcure-mcp-rag. - 沙盒JavaScript --具有严格限制(超时、语句计数、递归深度)的Jint引擎
- SSRF保护 --HTTP请求、web获取和文件下载会阻止私有IP范围和环回地址
- 跨客户 --适用于Claude Desktop、VS Code、AssistStudio和任何兼容MCP的客户端
- 标准运输 --通过stdin/stdout上的JSON-RPC实现标准MCP子流程模型
安装
dotnet tool install -g FieldCure.Mcp.Essentials安装后 fieldcure-mcp-essentials 命令在全球范围内可用。
来源
git clone https://github.com/fieldcure/fieldcure-mcp-essentials.git
cd fieldcure-mcp-essentials
dotnet build需求
- .NET 8.0运行时 或以后
工具
| 工具 | 描述 | 破坏性 | |
|---|---|---|---|
http_request | 具有自定义标头和正文的完整HTTP客户端(GET/POST/PUT/DELETE/PATCH/HEAD) | -- | |
web_search | 搜索网络并返回片段(标题、URL、描述) | -- | |
web_fetch | 获取URL并将内容提取为Markdown——HTML页面和文档(PDF、DOCX、HWPX、PPTX、XLSX) | -- | |
download_file | 使用可配置的下载目录、100MB限制和原子保存将URL内容下载到磁盘 | 是 | |
run_command | 使用工作目录、环境变量、shell选择和输出截断标志执行shell命令 | 是 | |
run_javascript | 沙盒JavaScript执行(Jint)用于数学、数据处理、JSON、正则表达式 | -- | |
wolfram_alpha | Wolfram | Alpha完整结果API-符号数学,绘图,单位转换,常量;MathML用于本机渲染 | -- |
get_environment | 系统信息——本地时间、时区、操作系统、主机名、用户名。NET版本 | -- | |
read_file | 读取文件——带有偏移/限制的文本,解析为Markdown的文档(PDF、DOCX、HWPX、PPTX、XLSX) | -- | |
write_file | 使用自动目录创建功能向文件写入或附加文本 | 是 | |
search_files | 按glob模式和内容搜索文件(类似grep) | -- | |
remember | 存储键值内存(持久化在SQLite中) | -- | |
forget | 按关键字或关键字搜索删除记忆 | 是 | |
list_memories | 使用FTS5和分页功能搜索和列出存储的内存 | -- |
类别搜索(SerpApi/Serper/Tavily)
始终注册。每个工具运行时都会保护活动引擎的功能,并返回一个描述性错误,指向 set_search_engine 当当前引擎不支持该类别时。
| 工具 | 描述 | SerpApi | Serper | Tavily |
|---|---|---|---|---|
search_news | 通过谷歌新闻搜索最近的新闻文章 | 是 | 是 | 有 |
search_images | 使用大小/类型过滤搜索图像 | 是 | 是 | -- |
search_scholar | 搜索引用计数的学术论文 | 是 | 是 | -- |
search_patents | 使用发明人/受让人筛选搜索专利文件 | 是 | 是 | -- |
运行时发动机切换
| 工具 | 说明 |
|---|---|
set_search_engine | 切换主动发动机(bing, duckduckgo, serper, tavily, serpapi)在运行时。支付引擎API密钥在下一次搜索时通过env-var或MCP Elicitation延迟解析;开关本身只接受引擎名称。发射 notifications/tools/list_changed 关于成功。 |
get_search_engine | 返回当前活动的引擎及其类别功能。只读;使用此功能在主机UI中反映实时引擎状态,或在调用类别搜索工具之前检查类别支持。 |
web_search 对比 web_fetch 对比 download_file 对比 http_request
http_request | web_search | web_fetch | download_file | |
|---|---|---|---|---|
| 用途 | API调用、原始HTTP | Web搜索 | 读取网页 | 保存原始文件 |
| 响应 | 原始(JSON、HTML等) | {title, url, snippet}[] | Markdown(仅正文) | 保存路径的JSON元数据 |
| 转换 | 无 | 无 | SmartReader HTML→ Markdown | 无 |
| 长度限制 | max_response_chars (默认值:无限制,最大1MB) | max_results (最多10个) | max_length (最大20000) | 100 MB |
文档分析
web_fetch 和 read_file 可以将二进制文档解析为Markdown:
| 格式 | 扩展 | 检测 |
|---|---|---|
.pdf | 内容类型/URL扩展名(仅文本层;无OCR) | |
| Word | .docx | 内容类型/URL扩展名 |
| 韩文(HWPX) | .hwpx | URL扩展名(无标准内容类型) |
| PowerPoint | .pptx | 内容类型/URL扩展名 |
| Excel | .xlsx | 内容类型/URL扩展名 |
输出包括标题、表格、数学表达式([math: LaTeX]),以及幻灯片/页面分隔符。
文件下载
download_file 保存HTTP(S)URL中的原始字节。如果 save_path 如果省略,该工具将从中推断文件名 Content-Disposition、URL路径或生成的回退名称。相对的 save_path 值在配置下解析 download_directory;绝对路径按原样使用,受保护的系统目录除外。
默认下载目录为 ~/Downloads/mcp 并且在第一次使用时自动创建。下载被写入目标目录中的临时文件,然后通过原子移动/替换进行提交,因此失败或取消的下载不会留下部分最终文件。
{
"url": "https://example.com/report.pdf"
}{
"url": "https://example.com/report.pdf",
"save_path": "reports/report.pdf",
"overwrite": false
}网络搜索
默认引擎是Bing(免费,不需要API密钥)。为了获得更可靠的结果,请使用基于API的引擎:
| 引擎 | 免费层 | 类别搜索 | API密钥 |
|---|---|---|---|
| Bing(默认) | 无限制(抓取) | -- | 不需要 |
| Serper | 2500次 | 新闻、图片、学者、专利 | 瑟珀·德夫 |
| SerpApi | 每月100条 | 新闻、图片、学者、专利 | 蛇网 |
| Tavily | 1000/月 | 新闻 | tavily.com |
# Use Serper
fieldcure-mcp-essentials --search-engine serper --search-api-key YOUR_KEY
# Use Tavily
fieldcure-mcp-essentials --search-engine tavily --search-api-key YOUR_KEY
# Or via environment variables
ESSENTIALS_SEARCH_ENGINE=serper ESSENTIALS_SEARCH_API_KEY=xxx fieldcure-mcp-essentials环境变量自动检测
当 --search-engine 如果省略,服务器将扫描环境变量并自动选择最佳可用引擎:
| 发动机 | 环境变量 |
|---|---|
| Serper | SERPER_API_KEY |
| SerpApi | SERPAPI_API_KEY |
| 塔维利 | TAVILY_API_KEY |
检测优先级:Serper→ SerpApi→ 塔维利→ Bing/DuckDuckGo回退。
API密钥安全
| 引擎 | 认证方法 | 密钥暴露 |
|---|---|---|
| Serper | HTTP标头(X-API-KEY) | 不在URL中 |
| Tavily | 授权标头(Bearer 令牌) | 不在URL中 |
| 蛇 | URL查询参数(api_key=xxx) | 在服务器日志中可见 |
区域
使用 region 本地化结果的参数:
// Korean results
{ "query": "서울 맛집", "region": "ko-kr" }
// US English results
{ "query": "best restaurants NYC", "region": "en-us" }
// Global (default)
{ "query": "Python tutorial" }没有 --search-engine,后备引擎(Bing→ DuckDuckGo)自动打开验证码。自由发动机依赖于刮擦,可能是间歇性的-- 强烈建议将基于API的引擎用于任何非琐碎的用途。
无密钥的显式付费引擎——MCP激励
当 --search-engine serper|tavily|serpapi 被明确地选择,但是没有配置API密钥(CLI arg, ESSENTIALS_SEARCH_API_KEY,或特定于引擎的env-var),服务器等待直到第一个 web_search 呼叫,然后通过以下方式向MCP客户端请求密钥 MCP激发。如果用户拒绝,后续提示会询问是否使用免费的Bing/DuckDuckGo进行搜索。拒绝这两个选项可以让工具软故障并显示明确的信息,以便LLM可以恢复。
没有Elicitation支持的客户端(包括较旧的CLI主机)会立即退回到免费引擎,与2.1之前的行为相匹配。缓存密钥在进程生命周期内有效;如果该工具使缓存无效,则主机可以在上游401/403之后重新引出。
Wolfram|Alpha
wolfram_alpha 呼叫 全面成果API v2 并返回混合内容——明文、MathML(为原生呈现MathML的客户端逐字传递,例如ChatPanel/WebView2)和嵌入为 ImageContent.API的 reinterpret=true 该标志始终处于打开状态,因此大多数拼写错误级别的故障都会在服务器端自动纠正;只有真正的解析失败出现 isError: true 和 assumptions > tips > didyoumeans 指导。
应用程序ID
集 WOLFRAM_APPID 到在以下位置获得的AppID developer.wolframalpha.com (选择“完整结果API”;免费套餐:每月2000次,非商业)。在支持Elicitation的MCP客户端上,密钥也可以在首次使用时交互式提供。被拒绝的AppID(401/403)会触发一次无效并重试,因此可以重新获取键入错误的密钥;现有的 ApiKeyResolverRegistry 重新引出cap(每个env-var插槽2个)可以防止循环。
⚠️ 使用developer.wolframalpha.com, 不developer.wolfram.com-后者是一个单独的付费门户,将显示“没有访问任何API密钥的权限”免费帐户。
无论AppID状态如何,该工具始终已注册;如果没有密钥,它会返回设置指导错误,因此模型可以通知用户,而不是默默地跳过。
查询提示(出现在工具描述中)
- 仅限英文,简化关键字形式(
'France population',不'how many people live in France') - 指数表示法
6*10^14,从来没有6e14 - 单字母变量(
x,y,n) - 命名物理常数(
'speed of light',不299792458) - 对于有单位的方程,先求解没有单位的方程
RECOMMENDED / AVOID提示引导模型——简单的算法run_javascript,一般网络查询web_search,主观/新闻问题远离Wolfram
JavaScript沙盒
run_javascript 使用 金特 具有严格限制的发动机:
| 约束 | 值 |
|---|---|
| 超时 | 默认5秒,最大30秒 |
| 最大报表数 | 100000 |
| 递归深度 | 64 |
| 严格模式 | 强制 |
允许: Math.*, JSON, Date, RegExp, console.log、字符串/数组方法, parseInt, encodeURIComponent, atob/btoa
此 路 不通: setTimeout, setInterval, require, import, .NET interop, eval()
变量可以注入到脚本作用域中以供数据管道使用:
1. http_request(url: "https://api.example.com/data") → {"items": [...]}
2. run_javascript(
code: "data.items.filter(x => x.price > 100).map(x => x.name)",
variables: {"data": {"items": [...]}}
)运行命令
run_command 默认为主机的向后兼容shell: cmd.exe 在Windows和 /bin/sh 在Unix上。使用 shell 当命令需要特定语法时:
| 壳牌 | 备注 |
|---|---|
auto | 违约; cmd.exe 在Windows上, /bin/sh 在Unix上 |
pwsh | PowerShell核心;建议在安装PowerShell本机命令时使用 |
powershell | 没有Windows主机的Windows PowerShell回退 pwsh |
cmd | 显式窗口 cmd.exe |
bash | 显式Bash(如果可用) |
sh | 显式POSIX shell(如果可用) |
每个流的详细输出上限为 max_output_chars (默认值100000)。回应包括 shell_used, stdout_truncated,以及 stderr_truncated;截断的流包含一个省略字符数的内联标记。
记忆
内存存储在SQLite中(%LOCALAPPDATA%/FieldCure/Mcp.Essentials/memory.db)并在同一台机器上的所有MCP客户端之间共享。
# Custom memory path
fieldcure-mcp-essentials --memory-path /path/to/memory.db
# Or via environment variable
ESSENTIALS_MEMORY_PATH=/path/to/memory.db fieldcure-mcp-essentials配置
基本设置
默认设置文件为:
- 窗户:
%LOCALAPPDATA%/FieldCure/Mcp.Essentials/settings.json - macOS/Linux:平台本地应用程序数据文件夹+
FieldCure/Mcp.Essentials/settings.json
{
"download_directory": "~/Downloads/mcp"
}下载目录优先级为:
- CLI: `--download-directory
`
- 环境:
ESSENTIALS_DOWNLOAD_DIRECTORY - 设置文件:
download_directory - 违约:
~/Downloads/mcp
使用 --settings-path 或 ESSENTIALS_SETTINGS_PATH 指向不同的设置文件。
克劳德桌面
添加 claude_desktop_config.json:
{
"mcpServers": {
"essentials": {
"command": "fieldcure-mcp-essentials"
}
}
}使用搜索引擎:
{
"mcpServers": {
"essentials": {
"command": "fieldcure-mcp-essentials",
"args": ["--search-engine", "serper", "--search-api-key", "YOUR_KEY"]
}
}
}VS代码(副本)
添加 .vscode/mcp.json:
{
"servers": {
"essentials": {
"command": "fieldcure-mcp-essentials"
}
}
}来自源代码(不含.NET工具)
{
"mcpServers": {
"essentials": {
"command": "dotnet",
"args": [
"run",
"--project", "C:\\path\\to\\fieldcure-mcp-essentials\\src\\FieldCure.Mcp.Essentials"
]
}
}
}数据存储
| 数据 | 位置 |
|---|---|
| 内存数据库 | %LOCALAPPDATA%/FieldCure/Mcp.Essentials/memory.db |
| 设置文件 | %LOCALAPPDATA%/FieldCure/Mcp.Essentials/settings.json |
| 默认下载 | ~/Downloads/mcp |
| 搜索API键 | 环境变量(SERPER_API_KEY, TAVILY_API_KEY, SERPAPI_API_KEY) |
项目结构
src/FieldCure.Mcp.Essentials/
├── Program.cs # MCP server entry point (stdio)
├── Configuration/
│ └── EssentialsSettings.cs # Server settings and download directory resolution
├── Http/
│ └── SsrfGuard.cs # SSRF protection (shared by http_request & web_fetch)
├── Memory/
│ └── MemoryStore.cs # SQLite + FTS5 memory storage
├── Search/
│ ├── ISearchEngine.cs # Search engine interface
│ ├── ICategorySearchEngine.cs # Category search interface (news, images, scholar, patents)
│ ├── SearchResult.cs # Search result record
│ ├── BingSearchEngine.cs # Bing scraping (default)
│ ├── DuckDuckGoSearchEngine.cs # DuckDuckGo lite scraping
│ ├── FallbackSearchEngine.cs # Auto-rotate on CAPTCHA
│ ├── SerperSearchEngine.cs # Serper.dev API (+ category search)
│ ├── TavilySearchEngine.cs # Tavily API (+ news)
│ └── SerpApiSearchEngine.cs # SerpApi API (+ category search)
└── Tools/
├── HttpRequestTool.cs # http_request
├── WebSearchTool.cs # web_search
├── WebFetchTool.cs # web_fetch (SmartReader)
├── DownloadFileTool.cs # download_file
├── CategorySearchTools.cs # search_news / search_images / search_scholar / search_patents
├── RunCommandTool.cs # run_command
├── RunJavaScriptTool.cs # run_javascript (Jint sandbox)
├── WolframAlphaTool.cs # wolfram_alpha (Full Results API, MathML pass-through)
├── GetEnvironmentTool.cs # get_environment
├── ReadFileTool.cs # read_file
├── WriteFileTool.cs # write_file
├── SearchFilesTool.cs # search_files
└── MemoryTools.cs # remember / forget / list_memories发展
# Build
dotnet build
# Test
dotnet test
# Pack as dotnet tool
dotnet pack src/FieldCure.Mcp.Essentials -c Release另见
部分 AssistStudio生态系统.
