Contentrain
What it does
Git content governance, 23 deterministic MCP tools. Hosted: docs.contentrain.io/developer/mcp-cloud
- Connects 컴퓨터 또는 클라우드
- Account or key Cloud: Sign in to the service when you connect (OAuth) · Local: No key needed
- Category 개발자 도구
설치
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
검사 5/5 통과 · 내가 묻는 내용은 제작자 서버(studio.contentrain.io)를 거쳐요
먼저: 어떤 AI를 쓰시나요?
쓰는 앱을 고르면 아래에 단계가 나옵니다.
Claude에 연결할 수 있어요 · 약 2분
키 필요 없음, 설치 필요 없음 · claude.ai나 데스크톱 앱에서 한 번 설정하면 채팅에서 쓸 수 있어요 · 무료 계정은 1개까지 · Team/Enterprise는 소유자(Owner)가 추가
Claude의 Connectors 페이지 열기
CustomizeConnectors
“+ Add” → “Add custom connector”를 누르고 이 2칸 채우기
여기서 복사해 Claude의 같은 이름 칸에 붙여 넣고 Continue를 누르세요
Name · 이름ContentrainRemote MCP server URL · 주소https://studio.contentrain.io/api/mcp/remoteAuthentication은 Claude가 찾은 그대로 두고 Add를 누르세요
채팅에서 켜기
+ConnectorsContentrain
해 보기
Contentrain을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Claude가 Contentrain을 쓰고 있다고 하거나 답에 Contentrain 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
ChatGPT는 기업용 요금제에서만 연결돼요
웹의 ChatGPT Business, Enterprise, Edu에서 워크스페이스 관리자나 소유자가 추가해요 · Free, Plus, Pro를 쓰면: 내 ChatGPT 요금제로는 아직 MCP를 직접 연결할 수 없어요
웹 ChatGPT에서 MCP 추가 페이지 열기
Plugins+Add custom MCP server
이름과 주소 입력
이름을 넣고 Connection에 주소를 붙여 넣은 뒤 경고에 체크하고 Create as a plugin을 누르세요
Name · 이름ContentrainConnection · 주소https://studio.contentrain.io/api/mcp/remote채팅에서 Contentrain 고르기
새 채팅을 열고 입력 전에 플러그인 목록에서 Contentrain을 고르세요
해 보기
Contentrain을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ ChatGPT가 Contentrain을 쓰고 있다고 하거나 답에 Contentrain 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 OpenAI 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Claude Code에 연결할 수 있어요 · 약 2분
키 필요 없음, 설치 필요 없음
터미널 열기
Mac: Command+스페이스를 누르고 Terminal 입력 · Windows: PowerShell 열기
이 명령을 붙여 넣고 Enter
claude mcp add --transport http --scope user contentrain https://studio.contentrain.io/api/mcp/remoteClaude Code에서 /mcp 입력
Contentrain이 목록에 있고 연결됨으로 보이면 돼요
해 보기
Contentrain을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Claude Code가 Contentrain을 쓰고 있다고 하거나 답에 Contentrain 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Cursor에 연결할 수 있어요 · 약 2분
키 필요 없음, 설치 필요 없음
Cursor에서 AI 채팅을 Agent 모드로 열기
해 보기
Contentrain을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Cursor가 Contentrain을 쓰고 있다고 하거나 답에 Contentrain 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Cursor 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
VS Code에 연결할 수 있어요 · 약 2분
키 필요 없음, 설치 필요 없음
VS Code에서 AI 채팅을 Agent 모드로 열기
해 보기
Contentrain을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ VS Code가 Contentrain을 쓰고 있다고 하거나 답에 Contentrain 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 VS Code 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Windsurf, Zed, Gemini CLI 같은 다른 MCP 앱은 추가 방법이 저마다 달라요. 앱 목록에서 확인하세요
웹으로 연결하는 앱용 주소
https://studio.contentrain.io/api/mcp/remoteJSON 설정은 아래 “개발자용”에 있어요
개발자용: 터미널 명령과 JSON 설정
웹으로 연결
Claude Code
claude mcp add --transport http --scope user contentrain https://studio.contentrain.io/api/mcp/remoteCursor (~/.cursor/mcp.json)
{
"mcpServers": {
"contentrain": {
"url": "https://studio.contentrain.io/api/mcp/remote"
}
}
}VS Code (mcp.json)
{
"servers": {
"contentrain": {
"type": "http",
"url": "https://studio.contentrain.io/api/mcp/remote"
}
}
}컴퓨터에 설치
Claude Code
claude mcp add --scope user contentrain -- npx -y @contentrain/mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"contentrain": {
"command": "npx",
"args": [
"-y",
"@contentrain/mcp"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"contentrain": {
"command": "npx",
"args": [
"-y",
"@contentrain/mcp"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"contentrain": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@contentrain/mcp"
]
}
}
}이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
한눈에 보기
어떤 앱에서 쓸 수 있나요
이 서버의 연결 방식과 각 앱의 공식 문서를 바탕으로 했어요. 2026년 11월 10일 확인.
인터넷으로 연결하는 앱
ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
내 컴퓨터에서 실행하는 앱
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
할 수 있는 일
서버가 도구 목록을 보여 주기 전에 로그인을 요구해요.
기본 점검i
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 13일 점검
- ✓ 통과
제작자와 저장소 일치
레지스트리 이름이 GitHub 계정 Contentrain 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
- ✓ 통과
계속 관리되고 있음
코드 마지막 변경: 6일 전
- ✓ 통과
라이선스 있음
MIT 사용
- ✓ 통과
엔드포인트 응답
172ms 만에 응답(HTTP 401)
- ✓ 통과
OAuth로 로그인
OAuth 로그인을 지원한다고 밝혀서, AI 앱이 로그인 화면으로 안내해 줘요
- … 아직 점검 안 함
도구 설명에 숨겨진 지시 없음
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
토론
질문하고, 팁을 나누고, 안 되는 점을 알려 주세요. "도움이 됨"이 많은 순서예요.
사용자 리뷰
아직 리뷰가 없어요
개발자 도구 카테고리의 다른 서버와 비교i
- 이 카테고리의 다른 서버 5821개 중 69%보다 스타가 많아요
- 이 카테고리의 다른 서버 5821개 중 71%보다 최근에 레지스트리에 공개됐어요
- 기본 점검 결과가 이 카테고리의 다른 서버 5821개 중 100%와 같거나 더 좋아요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
자주 묻는 질문
Contentrain, 안전한가요?
해당하는 기본 점검 5개 중 5개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
어떤 키나 코드가 필요한가요?
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?
둘 다 가능해요. 내 컴퓨터에 설치해도 되고, 클라우드 버전에 연결해도 돼요.
아직 관리되고 있나요?
GitHub 저장소는 마지막으로 6일 전 변경됐고, 최신 버전(3.12.3)은 9일 전 레지스트리에 올라왔어요.
어떤 앱에서 쓸 수 있나요?
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되므로 원격 MCP를 지원하는 앱에서도 쓸 수 있어요. 예: ChatGPT Business 이상.
같은 카테고리의 다른 것
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Serena MCP: the IDE for your agent
A powerful toolkit for coding, providing semantic retrieval and editing capabilities.
제작자의 README
README 열기
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
@contentrain/mcp
Provider-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:
- agent produces content decisions
- MCP applies deterministic filesystem and git workflow
- humans review and merge
- the system keeps schema, locale, and serialization consistent
This package is the runtime core behind Contentrain's MCP integration. It can be used as:
- a stdio MCP server (
contentrain-mcp) - an embeddable server (
createServer(projectRoot)) - a low-level toolkit for config, models, content, validation, scanning, and git transaction flow
Install
pnpm add @contentrain/mcp
Requirements:
- Node.js
22+ - git available on the machine
Optional parser support for higher-quality source scanning:
@vue/compiler-sfc@astrojs/compilersvelte
They are listed as optional dependencies. The scanner still works without them, but Vue/Astro/Svelte detection is stronger when they are installed.
What It Does
@contentrain/mcp manages a .contentrain/ directory in your project and exposes MCP tools for:
- project initialization
- model creation and deletion
- content save, delete, and list
- validation and auto-fix
- normalize scan and apply flows
- bulk operations
- branch submission, review-mode merge, and branch-health awareness
- project health checking (doctor)
All write operations are designed around git-backed safety:
- a dedicated
contentrainbranch serves as the content state single source of truth - each write creates a temporary worktree on a feature branch forked from
contentrain(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) - auto-merge: feature merges into
contentrain, baseBranch advanced via update-ref,.contentrain/files selectively synced to developer's working tree when the base branch is the one checked out - baseBranch =
CONTENTRAIN_BRANCHenv →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 branch - plans are read from the working tree but committed on the fetched
contentraintip: JSON changes are carried over key by key, so entries another writer pushed are kept; a same-value conflict writes nothing and returnsCONTENT_WORKING_TREE_STALE - on a checked-out feature branch, which writes do not update,
.contentrain/**is read from thecontentrainref instead (source files still from the working tree); read tools report it ascontent_source - review: feature branch pushed to remote for team review; once merged (or deleted), its remote copy is removed too — best-effort, opt out with
remoteBranchCleanup: falsein config.json - local mode (
git.push: falseorCONTENTRAIN_NO_PUSH=1): nothing is ever pushed or deleted on the remote, and every result says so — see Git environment and local mode - every local write's
gitblock names the resolvedbase_branch; when it is not the checked-out branch, the result'swarningsays your working tree was left alone - commit hooks: skipped on machine commits by default;
git.verify: trueorCONTENTRAIN_VERIFY=1runs them, and a rejecting hook fails the write with its output — see Commit hooks - merged-branch detection survives base-history rewrites (ancestry check with a patch-id fallback), so rebases/squashes don't strand stale branches
- developer's working tree is never mutated during MCP git operations (no stash, no checkout, no merge)
- context.json never lands on feature branches — it is regenerated on the
contentrainbranch after merge (locally by the transaction layer; in remote flows by the orchestrator that owns the merge) - canonical JSON output — sorted keys, 2-space indent, trailing newline
- validation + next-step hints surfaced to the caller
Tool Surface
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.
Quick Start
Configure via CLI (recommended)
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.
Run as a standalone MCP server
CONTENTRAIN_PROJECT_ROOT=/path/to/project npx -y @contentrain/mcp
If CONTENTRAIN_PROJECT_ROOT is omitted, the current working directory is used.
Git environment and local mode
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" }.
Commit hooks
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