TinaCMS MCP服务器(C#)
该项目使用官方C#SDK实现了一个独立的模型上下文协议(MCP)服务器(modelcontextprotocol/csharp-sdk).其目的是公开允许与TinaCMS项目存储库管理的内容文件进行交互的工具。
这使得AI模型或其他MCP客户端能够通过标准化的MCP在TinaCMS站点内列出、读取、创建、更新和删除内容文件。
特性
- 连接到本地TinaCMS项目目录。
- 使用标准MCP Stdio传输进行通信。
- 提供用于基本内容管理操作的工具:
- 列出集合(以下目录 /content). - 列出集合中的文档(非递归和递归)。 - 正在读取文档内容。 - 读取文档封面(元数据)。 - 创建新文档。 - 更新现有文档(替换全部内容)。 - 更新文档前端(元数据合并)。 - 正在删除文档。 - 移动/重命名文档。 - 复制文档。 - 读取TinaCMS生成的模式(.tina/schema.json).
- 包括基本路径验证和安全检查。
先决条件
- .NET 8 SDK (或更高版本):需要构建和运行C#服务器。
- Node.js和npm/npx: 需要运行MCP检查器工具进行测试。
- TinaCMS项目: 您需要一个本地TinaCMS项目,您希望此服务器管理其内容。
设置
- 克隆/下载: 获取此项目的源代码。
- 配置根路径:
- 打开 appsettings.json 文件。 - 找到 TinaProject 部分。 - 重要: 更换 *样本路径* 规定用于 RootPath 随着 完整、绝对路径 您的目标TinaCMS项目的根目录(包含 .tina 文件夹)。 - 使用正斜杠(/)用于路径分隔符(建议用于跨平台兼容性)或双反斜杠(\\)如果在Windows上更喜欢。
{
"Logging": { ... },
"TinaProject": {
"RootPath": "/path/to/your/tina-project"
}
}- 还原依赖关系: 打开终端
TinaMcpServer项目目录并运行:
dotnet restore发展
- 构建: 要编译项目,请执行以下操作:
dotnet build- 本地运行(用于测试): 服务器设计为由MCP客户端(如检查器)运行。直接运行它不是很有用,但你可以从以下步骤开始:
dotnet run 或者通过运行编译后的DLL:
dotnet bin/Debug/net8.0/TinaMcpServer.dll服务器将启动并等待MCP客户端通过标准输入/输出连接。如果在没有客户端的情况下运行,它可能会立即退出或显示JSON错误。
MCP检验员测试
测试服务器及其工具的推荐方法是使用官方的MCP检查器。
- 确保项目建成: 跑
dotnet build如果你还没有。 - 运行检查器: 在您的终端(在
TinaMcpServer项目目录),运行以下命令。这告诉检查器使用dotnet:
npx @modelcontextprotocol/inspector dotnet bin/Debug/net8.0/TinaMcpServer.dll- 打开检查器UI: 该命令将输出URL(例如。,
http://127.0.0.1:6274).在您的网络浏览器中打开此URL。 - 连接: 点击检测到的“连接”按钮
TinaMcpServer. - 使用工具:
- 导航到“工具”选项卡。 - 单击“列出工具”查看所有可用工具。 - 单击特定工具查看其描述和参数。 - 填写所需参数,然后单击“运行工具”。 - 观察结果,并检查运行检查器的终端是否有来自C#服务器的日志。
可用工具
*(此处省略了描述;有关完整详细信息,请参阅代码中的工具属性)*
ListTinaCollections():列出下的集合目录/content.ListCollectionDocuments(collection):直接列出集合目录中的文件。ListDocumentsRecursive(collection):列出集合中的所有文件,包括子目录。GetTinaDocument(collection, relativePath):获取文档的全文内容。CreateTinaDocument(collection, relativePath, content):创建新文档;如果存在,则失败。UpdateTinaDocument(collection, relativePath, content):覆盖现有文件;如果它不存在,就会失败。DeleteTinaDocument(collection, relativePath):删除现有文档;如果它不存在,就会失败。MoveDocument(collection, oldRelativePath, newRelativePath):移动/重命名文档。CopyDocument(collection, sourceRelativePath, destinationRelativePath):复制文档。GetDocumentMetadata(collection, relativePath):获取YAML frontmatter作为JSON字符串。UpdateDocumentMetadata(collection, relativePath, metadataUpdatesJson):从JSON对象添加/更新frontmatter字段。GetCollectionSchemaInfo(collection):阅读.tina/schema.json文件内容。
未来潜在的增强功能
- 假设的配置
/content目录名称。 - 更精细的更新操作(例如,部分更新而不是完全替换)。
- 如果需要,支持不同的frontmatter格式(例如JSON、TOML)。
- 更强大的模式解析/交互。
- 不同的传输选项(例如HTTP/SSE)。

