内容管理协议服务器

TinaCMS MCP Server是一个基于C#的独立服务器,通过标准化的模型上下文协议(MCP)提供对TinaCMS项目存储库中内容文件的交互工具,支持列表、读取、创建、更新和删除操作。

  • by calumjs
  • C#
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 calumjs/tinamcp

使用说明

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项目,您希望此服务器管理其内容。

设置

  1. 克隆/下载: 获取此项目的源代码。
  2. 配置根路径:
    • 打开 appsettings.json 文件。
    • 找到 TinaProject 部分。
    • 重要: 更换 样本路径 规定用于 RootPath 随着 完整、绝对路径 您的目标TinaCMS项目的根目录(包含 .tina 文件夹)。
    • 使用正斜杠(/)用于路径分隔符(建议用于跨平台兼容性)或双反斜杠(\\)如果在Windows上更喜欢。
    {
      "Logging": { ... },
      "TinaProject": {
        "RootPath": "/path/to/your/tina-project" 
      }
    }
    
  3. 还原依赖关系: 打开终端 TinaMcpServer 项目目录并运行:
    dotnet restore
    

发展

  • 构建: 要编译项目,请执行以下操作:
    dotnet build
    
  • 本地运行(用于测试): 服务器设计为由MCP客户端(如检查器)运行。直接运行它不是很有用,但你可以从以下步骤开始:
    dotnet run 
    
    或者通过运行编译后的DLL:
    dotnet bin/Debug/net8.0/TinaMcpServer.dll
    
    服务器将启动并等待MCP客户端通过标准输入/输出连接。如果在没有客户端的情况下运行,它可能会立即退出或显示JSON错误。

MCP检验员测试

测试服务器及其工具的推荐方法是使用官方的MCP检查器。

  1. 确保项目建成: 跑 dotnet build 如果你还没有。
  2. 运行检查器: 在您的终端(在 TinaMcpServer 项目目录),运行以下命令。这告诉检查器使用 dotnet:
    npx @modelcontextprotocol/inspector dotnet bin/Debug/net8.0/TinaMcpServer.dll
    
  3. 打开检查器UI: 该命令将输出URL(例如。, http://127.0.0.1:6274).在您的网络浏览器中打开此URL。
  4. 连接: 点击检测到的“连接”按钮 TinaMcpServer.
  5. 使用工具:
    • 导航到“工具”选项卡。
    • 单击“列出工具”查看所有可用工具。
    • 单击特定工具查看其描述和参数。
    • 填写所需参数,然后单击“运行工具”。
    • 观察结果,并检查运行检查器的终端是否有来自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)。