微型mcp服务器
模块化建筑工具包 主控程序 Bun上的服务器——持久上下文图、增量代码扫描、全文搜索和内置输入验证。没有依赖关系。
安装
bun add tiny-mcp-server快速开始
import { registerTool, registerResource, ToolError, serve } from "tiny-mcp-server";
registerTool(
"greet",
"Greet someone by name",
{
type: "object",
required: ["name"],
properties: {
name: { type: "string", minLength: 1 }
}
},
async ({ name }) => ({ greeting: `Hello, ${name}!` })
);
registerResource(
"info://server",
"Server Info",
"Basic server information",
"application/json",
async () => JSON.stringify({ name: "my-server", version: "1.0.0" })
);
serve({ name: "my-server", version: "1.0.0" });运行它:
bun server.ts就是这样——你有一个可以工作的MCP服务器,它具有自动输入验证、结构化错误和stdio传输功能。
特性
工具 --使用JSON模式输入定义将异步函数注册为MCP工具。客户通过以下方式发现工具 tools/list 并通过以下方式给他们打电话 tools/call.
输入验证 --在处理程序运行之前,工具参数会根据其JSON模式进行验证。支持 type, required, properties, enum, items, minimum/maximum, minLength/maxLength。没有依赖关系。
结构化错误 --投掷 ToolError 使用类似代码 "not_found" 或 "permission_denied" 因此,客户端可以以编程方式处理错误,而不是解析字符串。
资源 --通过静态URI或带有变量提取的动态URI模板公开只读数据。
流媒体 --使用异步生成器处理程序将文本块作为通知流式传输到客户端。最终回复包含完整的文本。向后兼容——常规处理程序工作不变。
采样 -在工具处理程序中从连接的客户端请求LLM完成,而不需要您自己的API密钥。
测试IT
# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize"}' | bun server.ts
# List tools
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | bun server.ts
# Call a tool
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"greet","arguments":{"name":"World"}}}' | bun server.ts运行测试
bun test模块框架
选择您需要的内置模块,删除不需要的模块,然后添加您自己的模块。每个模块都是一个工厂函数,它注册工具并通过共享上下文向其他模块公开API。依赖关系会自动解决。
import { loadModules, serve } from "tiny-mcp-server";
import recall from "tiny-mcp-server/src/modules/recall";
import patterns from "tiny-mcp-server/src/modules/patterns";
import beacon from "tiny-mcp-server/src/modules/beacon";
import scanner from "tiny-mcp-server/src/modules/scanner";
import query from "tiny-mcp-server/src/modules/query";
import graphExport from "tiny-mcp-server/src/modules/export";
import diff from "tiny-mcp-server/src/modules/diff";
import stats from "tiny-mcp-server/src/modules/stats";
import refactor from "tiny-mcp-server/src/modules/refactor";
import prompt from "tiny-mcp-server/src/modules/prompt";
await loadModules([
recall({ dbPath: "./data.db" }),
patterns(),
beacon(),
scanner(),
query(),
graphExport(),
diff(),
stats(),
refactor(),
prompt(),
]);
serve({ name: "my-server", version: "1.0.0" });模块通过拓扑排序按依赖顺序自动加载。
内置模块:
- 召回 --具有键值存储、名称空间和模式查询的SQLite持久性
- 模式 --用于映射项目结构的上下文图(节点、边、注释、遍历、最短路径)
- 信标 --在所有存储的上下文中进行全文搜索,BM25评分
- 扫描仪 --目录扫描程序,带有JS/TS解析器,用于提取函数、类、接口、导入、调用、副作用和复杂性度量。支持自动重新扫描的监视模式。
- 查询 --基于谓词的查询引擎,将图遍历和文本搜索与过滤、排序和限制相结合
- 出口 --图形导出为DOT(Graphviz)或JSON,并按节点类型、关系或接近度进行过滤
- 差异 --基于快照的图形比较检测添加、删除和更改的节点/边
- 统计 --聚合指标:复杂性统计、连接最多的节点、热点检测、依赖深度
- 重构 --查找文件中对符号的所有引用,并预览重命名影响
- 提示 --从图中构建最小的LLM上下文:提取焦点函数、依赖关系、调用者和类型作为紧凑的提示,并使用令牌预算
自定义模块 可以依赖于任何内置模块,并通过共享上下文访问其API。例如,在Recall中存储数据或向Patterns图添加节点的模块只需要声明依赖关系:
export default function myModule() {
return {
name: "my-module",
depends: ["recall", "patterns"],
init(ctx) {
ctx.registerTool("my_tool", "Does something useful", schema, async (args) => {
ctx.recall.set("my-ns", args.key, args.value);
ctx.patterns.addNode({ id: args.id, type: "custom", metadata: {} });
return { ok: true };
});
},
};
}看 模块框架 完整的指南。
文档
- API 参考 --所有出口的完整参考
- 输入验证 --支持的模式关键字、错误格式、选择退出
- 错误处理 --工具错误、错误代码、模式
- 资源 --静态资源、模板、二进制内容
- 流媒体 --用于流式响应的异步生成器处理程序
- 采样 --向客户请求LLM完成
- 测试 --使用bun进行单元和集成测试:测试
- 模块框架 --编写和加载可组合模块
- 召回模块 --SQLite持久化模块
- 模式模块 --上下文图模块
- 信标模块 --上下文搜索模块
- 扫描仪模块 --目录扫描和代码分析
- 查询模块 --基于谓词的图查询
- 导出模块 --DOT和JSON图形导出
- AI代理HOWTO --AI代理实现服务器的分步指南
MCP客户端配置
对于Claude Desktop,添加到您的配置中:
{
"mcpServers": {
"my-server": {
"command": "path/to/bun",
"args": ["run", "/path/to/server.ts"]
}
}
}许可证
麻省理工学院
