最上层的mcp
用于搜索本地Topdrawer手册文本文件和 通过外部渲染现有Topdrawer输入文件 td 可执行。
服务器公开了MCP工具,用于手动搜索、呈现和示例元数据 发现:
search_manual用于使用行号片段进行不区分大小写的子字符串搜索lookup_command通过规范名称或唯一别名进行结构化指挥指导render_topdrawer_file用于将现有Topdrawer输入文件渲染为PNGrender_topdrawer_script用于将内联Topdrawer脚本文本渲染为PNGlist_manual_samples用于列出带有可选过滤器的精选示例元数据get_manual_sample用于按id获取一个精选的样本元数据条目
范围
此存储库负责:
- 阅读本地纯文本Topdrawer手册
- 通过MCP stdio服务器公开简单的手动搜索
- 执行已安装的
td二进制来呈现现有的输入文件 - 通过同一渲染管道执行内联Topdrawer脚本文本
此存储库不负责:
- 构建或包装
td可执行文件本身 - 维护上游Topdrawer源代码树
- 重写用户提供的
.top文件到位 - 超出当前商定的源策略范围的广泛手动预处理
数据
默认情况下,服务器读取:
data/topdrawer.txt该文件被视为纯UTF-8文本。服务器不解析Topdrawer 命令、部分、生成的HTML或源代码清单。
您可以使用以下命令覆盖手动路径:
TOPDRAWER_MANUAL_PATH=/path/to/manual.txt看 docs/source-policy.md 了解此存储库的方式 处理规范的手动源、伴随源和未来生成的数据。
预处理
对于小型确定性索引,存在一个可选的构建时预处理CLI 生成任务。当前第一遍提取顶级第15章命令 部分从 topdrawer.doc.
从存储库根目录运行它:
uv run topdrawer-mcp-preprocess您可以使用以下命令覆盖源文件路径:
TOPDRAWER_DOC_SOURCE_PATH=/path/to/topdrawer.doc uv run topdrawer-mcp-preprocess跑
VS Code以以下方式启动服务器 uv --directory ${workspaceFolder} run topdrawer-mcp 在 .vscode/mcp.json.
${workspaceFolder} 是VS代码替换,不能移植到其他MCP 客户。在VS Code之外,使用绝对存储库路径,例如:
uv --directory /absolute/path/to/topdrawer-mcp run topdrawer-mcp从存储库根目录:
uv run topdrawer-mcp使用 render_topdrawer_file,安装 td Ghostscript(gs)所以两者都是 可用的 PATH。您可以覆盖 td 可执行路径包含:
TD_EXECUTABLE_PATH=/path/to/td uv run topdrawer-mcp通过MCP客户端运行时,传递 TOPDRAWER_MANUAL_PATH 和 TD_EXECUTABLE_PATH 通过客户端的环境配置,而不是 编辑存储库默认值。
VS Code通过以下方式启动服务器:
.vscode/mcp.jsonMCP工具
search_manual
输入:
{
"query": "BARGRAPH",
"limit": 5,
"context_lines": 2
}limit 默认为 5 并被夹紧 1..20. context_lines 默认为 2 并被夹紧 0..10.
render_topdrawer_file
输入:
{
"input_path": "examples/error-bars.top",
"output_path": "/tmp/output.png",
"overwrite": false
}input_path 可以是绝对的,也可以是相对于当前工作目录的。 output_path 是可选的;如果省略,服务器将写入一个唯一的PNG路径 在系统临时目录下。 overwrite 默认为 false.PNG输出为 渲染为不透明的白色背景,并修剪为PostScript 带有小填充的BoundingBox。
Topdrawer输入示例:
set symbol 1P
set order y x dx dy
100 1 0.5 10
144 2 0.5 12
196 3 0.5 14
plot使用 render_topdrawer_file 当你已经有了 .top 磁盘上的文件。
render_topdrawer_script
输入:
{
"script": "set symbol 1P\nset order y x dx dy\n100 1 0.5 10\n144 2 0.5 12\n196 3 0.5 14\nplot\n",
"base_dir": "/tmp/sample-data",
"output_path": "/tmp/output.png",
"overwrite": false
}script 必须非空。 base_dir 是可选的,控制相对程度 脚本内的路径,例如 set file input='dat',已解决。当 省略,相对引用使用服务器的当前工作目录。便携式网络图形 输出以不透明的白色背景呈现,并修剪为 带有小填充的PostScript边界框。
使用 render_topdrawer_script 当呼叫者有内联Topdrawer文本时,聊天 代理转换为脚本的数据,或不转换为脚本变体的数据 需要保存为持久 .top 文件第一。
lookup_command
输入:
{
"command": "SYMBOL"
}按规范命令名称或 唯一别名。此工具仅返回结构化命令元数据。使用 search_manual 用于免费文本手动搜索。
list_manual_samples
输入:
{
"category": "histogram",
"command": "HISTOGRAM",
"query": "basic",
"limit": 20
}所有过滤器都是可选的。 category 匹配一个精心策划的样本类别。 command 火柴 primary_commands 案件不敏感。 query 执行一个 仅对样本元数据进行不区分大小写的子字符串搜索。此工具返回 仅元数据;它不返回示例脚本文本。
get_manual_sample
输入:
{
"sample_id": "scatter-error-bars"
}按id返回一个精选的示例元数据条目。此工具返回元数据 只有;示例脚本文本仍然不在当前MCP表面的范围内。
测试
运行完整的测试套件:
uv run --extra test pytest只运行Python单元测试:
uv run --extra test pytest -m unit仅运行基于检查器的集成测试:
uv run --extra test pytest -m integration集成测试使用 npx @modelcontextprotocol/inspector 并要求 Node.js与 npx 可用的 PATH.
