GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者提供的说明(英文原文)
Git content governance, 23 deterministic MCP tools. Hosted: docs.contentrain.io/developer/mcp-cloud
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://studio.contentrain.io/api/mcp/remote打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"contentrain": {
"command": "npx",
"args": [
"-y",
"@contentrain/mcp"
]
}
}
}在终端中运行这条命令
claude mcp add --transport http contentrain https://studio.contentrain.io/api/mcp/remoteclaude mcp add contentrain -- npx -y @contentrain/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"contentrain": {
"url": "https://studio.contentrain.io/api/mcp/remote"
}
}
}粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"contentrain": {
"command": "npx",
"args": [
"-y",
"@contentrain/mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"contentrain": {
"type": "http",
"url": "https://studio.contentrain.io/api/mcp/remote"
}
}
}粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"contentrain": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@contentrain/mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://studio.contentrain.io/api/mcp/remote菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
服务器要求先登录,才会列出它的工具。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 Contentrain 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 86 毫秒内响应(HTTP 401)
声明支持 OAuth 登录,你的 AI 应用可以带你去登录
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
两种方式都可以:安装在你的电脑上,或者连接云端版本。
GitHub 仓库最后更新于–,最新版本(3.12.3)于前天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:GitHub, Desktop Commander, Cloudflare MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
@contentrain/mcpProvider-agnostic MCP engine for Contentrain — local-first by default, with optional GitHub and GitLab backends and an HTTP transport for remote drivers such as Studio.
Start here:
Contentrain is a content governance ecosystem for teams and AI agents. In it, this engine works like this:
This package is the runtime core behind Contentrain's MCP integration. It can be used as:
contentrain-mcp)createServer(projectRoot))pnpm add @contentrain/mcp
Requirements:
22+Optional parser support for higher-quality source scanning:
@vue/compiler-sfc@astrojs/compilersvelteThey are listed as optional dependencies. The scanner still works without them, but Vue/Astro/Svelte detection is stronger when they are installed.
@contentrain/mcp manages a .contentrain/ directory in your project and exposes MCP tools for:
All write operations are designed around git-backed safety:
contentrain branch serves as the content state single source of truthcontentrain (branch name: cr/{scope}/{target}/{timestamp}-{suffix}, e.g. cr/content/blog-post/1730000000-a1b2; bulk locale copies, locale-scoped status changes and scaffold add a {locale} segment before the timestamp)contentrain, baseBranch advanced via update-ref, .contentrain/ files selectively synced to developer's working tree when the base branch is the one checked outCONTENTRAIN_BRANCH env → repository.default_branch → remote HEAD → main → master → checked-out branch → main (fallback). A write made on a feature branch never merges, moves or pushes that branchcontentrain tip: JSON changes are carried over key by key, so entries another writer pushed are kept; a same-value conflict writes nothing and returns CONTENT_WORKING_TREE_STALE.contentrain/** is read from the contentrain ref instead (source files still from the working tree); read tools report it as content_sourceremoteBranchCleanup: false in config.jsongit.push: false or CONTENTRAIN_NO_PUSH=1): nothing is ever pushed or deleted on the remote, and every result says so — see Git environment and local modegit block names the resolved base_branch; when it is not the checked-out branch, the result's warning says your working tree was left alonegit.verify: true or CONTENTRAIN_VERIFY=1 runs them, and a rejecting hook fails the write with its output — see Commit hookscontentrain branch after merge (locally by the transaction layer; in remote flows by the orchestrator that owns the merge)23 MCP tools, plus 5 media tools on a media-capable provider such as Studio, with annotations (readOnlyHint, destructiveHint, idempotentHint, and openWorldHint: false everywhere except contentrain_media_ingest, which fetches a caller-supplied URL server-side) for client safety hints.
Tool listing is capability-aware. tools/list only advertises tools the resolved provider + projectRoot pair can actually satisfy. A local stdio server lists the 23 core tools; a session driven by a remote provider (GitHub/GitLab, no local checkout) lists only the remote-safe subset — status, describe, describe_format, model_save, model_delete, content_save, content_delete, content_list, content_status, vocabulary_save, vocabulary_delete, validate. The requirement map lives in TOOL_REQUIREMENTS (@contentrain/mcp/tools/availability).
| Tool | Purpose | Read-only | Destructive |
|---|---|---|---|
contentrain_status | Project status, config, models, branch health, context | Yes | — |
contentrain_describe | Full schema and sample data for a model | Yes | — |
contentrain_describe_format | File-format and storage contract reference | Yes | — |
contentrain_doctor | Project health report (env, structure, models, orphans, local + remote branches, SDK) | Yes | — |
contentrain_init | Create .contentrain/ structure and base config | — | — |
contentrain_scaffold | Apply a starter template such as blog, docs, landing, saas | — | — |
contentrain_model_save | Create or update a model definition | — | Yes |
contentrain_model_delete | Delete a model definition | — | Yes |
contentrain_content_save | Save content entries for any model kind | — | Yes |
contentrain_content_delete | Delete content entries | — | Yes |
contentrain_content_list | Read content entries, each with its publish state under meta | Yes | — |
contentrain_content_status | Change entry status — publish, unpublish, archive (publishing validates first) | — | Yes |
contentrain_validate | Validate project content, optionally auto-fix structural issues | — | — |
contentrain_submit | Push cr/* branches to remote, then lazily prune merged local + remote leftovers | — | — |
contentrain_merge | Merge a review-mode branch into contentrain locally (by exact branch or model); deletes its remote copy | — | Yes |
contentrain_reconcile | Content-aware three-way merge of a diverged contentrain ↔ base pair (dry_run first, resolutions second) | — | — |
contentrain_branch_list | List pending cr/* branches with merge status (remote: true adds remote view) | Yes | — |
contentrain_branch_delete | Delete a stale/failed cr/* branch locally and on the remote (contentrain branch protected) | — | Yes |
contentrain_scan | Graph- and candidate-based hardcoded string scan | Yes | — |
contentrain_apply | Normalize extract/reuse execution with dry-run support | — | — |
contentrain_bulk | Bulk locale copy and deletes (dry_run previews; local only) | — | Yes |
contentrain_vocabulary_save | Add or update canonical vocabulary terms (merges with what exists) | — | — |
contentrain_vocabulary_delete | Remove canonical vocabulary terms by slug (confirm: true) | — | Yes |
contentrain_media_list | List media assets (search, tag filter, cursor pagination) | Yes | — |
contentrain_media_get | Get one media asset by id | Yes | — |
contentrain_media_ingest | Ingest an asset from a source URL (provider fetches server-side) | — | — |
contentrain_media_update | Update asset metadata (alt, tags, filename) | — | — |
contentrain_media_delete | Delete an asset from the media stack | — | Yes |
The five contentrain_media_* tools are a deterministic passthrough to the provider's optional media facet (RepoProvider.media) and are registered only when the provider exposes one (e.g. Studio MCP Cloud). Local stdio servers and plain GitHub/GitLab providers never list them. Ingest is URL-based (MCP has no binary channel); the provider implementation owns SSRF/MIME/size policy for the fetch.
npx contentrain setup claude-code # or: cursor, vscode, windsurf, copilot
This auto-creates the correct MCP config file for your IDE. See CLI docs for details.
CONTENTRAIN_PROJECT_ROOT=/path/to/project npx -y @contentrain/mcp
If CONTENTRAIN_PROJECT_ROOT is omitted, the current working directory is used.
These apply to the local provider (stdio, LocalProvider):
| Variable | Default | Effect |
|---|---|---|
CONTENTRAIN_BRANCH | unset | Base branch the contentrain branch advances. Wins over repository.default_branch, then remote HEAD → main → master → the checked-out branch → main. Per process; never written to config |
CONTENTRAIN_REMOTE | origin | Remote used for every fetch and push (and remote branch cleanup) |
CONTENTRAIN_NO_PUSH | unset | 1/true turns local mode on; 0/false turns it off. Any other value is ignored |
CONTENTRAIN_AUTHOR_NAME / CONTENTRAIN_AUTHOR_EMAIL | Contentrain / ai@contentrain.io | Author identity on Contentrain's commits |
CONTENTRAIN_GIT_BINARY | unset | Absolute path of the git binary to use |
CONTENTRAIN_VERIFY | unset | 1/true runs the repository's commit hooks on Contentrain's commits; 0/false skips them. Wins over git.verify. Any other value is ignored |
Local mode keeps every write on local branches: no branch push, no review push, no push after an auto-merge, approve or reconcile, and no remote branch delete or prune. Fetching is not a push and still happens when a remote exists. Turn it on for a project with "git": { "push": false } in .contentrain/config.json, or for one run with CONTENTRAIN_NO_PUSH=1.
Precedence: the env wins over the config in both directions. CONTENTRAIN_NO_PUSH=1 turns pushing off even when config allows it; CONTENTRAIN_NO_PUSH=0 turns it back on over git.push: false. With neither, pushing is on.
It is never a silent success. Each write's git block reports remote_push: "disabled" with remote_note: "not pushed (local mode)", and next_steps carries a LOCAL MODE line. contentrain_submit returns an error instead of pushing; land review branches with contentrain_merge. contentrain_merge and contentrain_branch_delete delete the local branch as usual and leave any remote copy untouched; contentrain_branch_delete reports remote_skipped: "local-mode", contentrain_merge reports remote: { deleted: false, skipped: "local-mode" }.
By default Contentrain's machine commits (the cr/* content commit, the context.json commit, a reconcile merge commit, the seed commit of an empty repo) skip the repository's commit hooks (pre-commit, prepare-commit-msg, commit-msg). That keeps exis
只显示了开头部分;其余内容请在仓库中阅读