content-knowledge-mcp
content-knowledge-mcp
콘텐츠 에이전트가 기업의 편집 지식(브랜드 규칙, 시각 템플릿 카탈로그, 과거 게시물과 그 결과)에 접근할 수 있게 해주는 MCP 서버입니다. 지식은 기업이 소유한 일반 마크다운 파일에 있으며, 서버는 이를 노출할 뿐입니다.
AI 에이전트와 워크플로 자동화에 관한 제 학사 논문의 기술적 핵심으로 구축되었습니다. 여기 있는 버전은 범용 엔진이며, 예시 지식으로 가상의 기업을 담고 있습니다.
벡터 데이터베이스가 없는 이유
가장 흔한 방법은 지식을 임베딩하고 유사도로 검색하는 것입니다. 이 서버는 두 가지 이유로 의도적으로 그렇게 하지 않습니다.
이 규모에서는 잘 정돈된 파일을 대상으로 한 구조적 검색이 낫습니다. 기업의 편집 규칙은 수천 수만 개가 아니라 수십 개 블록입니다. 이를 여러 조각으로 나누고 코사인 유사도로 검색하면, 인덱싱 단계, 동기화해야 할 저장소, 그리고 잘 드러나지 않는 장애 유형을 추가하는 대가로 이미 갖고 있던 호출률만 되찾을 뿐입니다.
모든 규칙에는 ID가 있고, 바로 그것이 핵심입니다. 규칙은 R1, R17, R905이고 템플릿은 T901, T905, 출시 기록은 L2입니다. 에이전트는 자신이 사용한 ID를 인용하도록 지시됩니다. 그것은 도출이 각 제안을 인간이 몇 초 안에 감사할 수 있는 형태로 바꿔 줍니다. 검토자는 rules_used: ["R920", "R903"]를 읽고 그 게시물이 어떤 규칙들로 나왔는지 정확히 파악할 수 있습니다. 임베딩은 문단을 돌려 주지 논증을 돌려 주지 않습니다. 목표가 작동하는 인간 승인 게이트라면, 감사 가능성이 상황을 낙관시키는 것보다 낫습니다.
그 대가는 실제이며 솔직히 인정할 만합니다. 검색은 어휘 기반이므로 규칙과 공유하는 단어가 하나도 없는 질의는 그 규칙을 찾아내지 못합니다. 서버는 일치하는 척하지 않고 NO_MATCH를 반환합니다. 그것이 평가 사례가 테스트하고 싶어 하는 동작입니다.
Related MCP server: OntoRamp Graph Query
아키텍처
Claude Desktop / Claude Code ──stdio──┐
├──▶ content-knowledge-mcp ──▶ KNOWLEDGE_PATH/
n8n MCP Client Tool ──────────HTTP────┘ (3 tools) guidelines/*.md R# rules, L# launch records
(host.docker.internal:8765) templates/catalog.md T# catalog
past-posts/*.md past posts and outcomes도구 세 개, 전송 스위치 하나, 상태 없음:
도구 | 반환값 |
| 해당 규칙 블록과 그 |
| 필터링된 템플릿 카탈로그, |
| 톤 조정 감을 잡을 수 있는 과거 게시물 최대 3개와 그 결과 |
서버는 콘텐츠를 소유하지 않습니다. KNOWLEDGE_PATH를 다른 폴더로 가리키면 다른 기업을 서빙합니다. 이것이 코드를 건드리지 않고도 공개할 수 있었던 이유입니다.
빠른 시작
git clone https://github.com/alessandro-martelli/content-knowledge-mcp
cd content-knowledge-mcp
python3 -m venv .venv && .venv/bin/pip install fastmcp
# run the twelve checks against the example knowledge
KNOWLEDGE_PATH=examples/knowledge .venv/bin/python smoke_test.py
# stdio, for Claude Desktop or Claude Code
KNOWLEDGE_PATH=examples/knowledge .venv/bin/python server.py
# HTTP on :8765, for the n8n MCP Client Tool
KNOWLEDGE_PATH=examples/knowledge .venv/bin/python server.py --httpexamples/knowledge/ 아래의 예시 지식은 전부 가상의 것입니다. 가상의 디자인 스쿨을 배경으로 하는 규칙, 출시 기록, 템플릿 카탈로그, 그리고 과거 게시물 세 개입니다. 누구나 저장소를 바로 실행하고 프로젝트에 쓸 콘텐츠를 확인할 수 있도록 존재합니다.
평가
스모크 테스트: 12/12. 각 테스트는 프로토콜을 통해 실제 fastmcp.Client를 거칩니다. 헬퍼 함수를 쓰지 않으므로 도구 초죽이나 전송 계층에서 문제가 끊기면 이 테스트에서 드러납니다.
에이전트 수준의 운영 규약: 8가지 케이스, 그중 5가지는 대립적 주의 (상충된 규칙, 범위를 벗어난 요청, 이용 불가한 도구, 일치하는 템플릿 없음, 불분명한 입력). 2026년 8월, 두 에이전트의 프롬프트를 기준으로 실행했습니다. 8개 중 6개가 통과했고, 처음부터 모든 출력이 유효한 JSON이었습니다. 실패 2건은 에이전트의 문제가 아니라 테스트 스위트의 결함이었습니다. 그 2건 모두 eval/test-log.md와 필요 대안들과 함께 적어 두었습니다. 로그는 원문 그대로 유지합니다. 성공만 보고하는 스위트는 아무것도 측정하는 게 아니기 때문입니다.
솔직한 한계
검색은 어휘 기반으로 빈도에 따라 점수를 계산합니다. 동의어를 이해하지 못하며, 질문에 쓰지 않은 단어로 표현된 규칙은 찾아내지 못합니다.
지식 폴더 구조는 고정되어 있습니다 (
guidelines/,templates/catalog.md,past-posts/), 카탈로그 파일의 파일명도 하드코딩되어 있습니다.쓰기 경로도 캐시도 없습니다. 호출이 있을 때마다 파일을 읽습니다. 이 규모에서는 무리가 없지만 블록이 만 개 정도가 되면 다른 문제가 됩니다.
평가에서 밝혀진 두 가지 공개 결함은 아직 이 코드에 반영되지 않았습니다.
rules_used는L#기록을 인용할 수 없고, 진행 계획 스키마는 채널이 비어 있는 행을 표현할 수 없습니다.
라이선스
MIT 라이선스입니다. LICENSE 파일을 참고하세요.
Available Tools
3 toolsget_post_examplesA
Retrieve past posts with their outcomes, for tone calibration. Query by topic, channel or type, e.g. 'linkedin annuncio'. Returns up to 3 examples; never copy sentences from them.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full behavioral disclosure burden. It reveals the return limit ('Returns up to 3 examples') and adds a usage constraint ('never copy sentences from them'). The verb 'Retrieve' sufficiently implies a read-only operation for this kind of tool. It could optionally disclose more about the output shape, but that is already structurally represented by an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences contain the entire message with no filler. The tool's value is front-loaded, followed by a practical example, a return limit, and a usage constraint. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter retrieval tool with an output schema available, the description covers what is returned, how to query, and a practical guardrail. The only omission is a note about the default parameter, but the schema already declares a default. The agent can select and invoke the tool with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage on the only parameter, `query`, so the description must compensate. It does: the parameter can be used to search by topic, channel, or type, and an example value is given. It does not describe what empty input does, though schema's default value covers that reasonable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Retrieve past posts with their outcomes'. It also adds the intended use, 'tone calibration', which makes the tool's function concrete. It is clearly distinguishable from siblings like search_guidelines and list_visual_templates because neither of those fetches example posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent that querying can be by topic, channel, or type, with a concrete example ('linkedin annuncio'). It does not explicitly contrast with search_guidelines or list_visual_templates, but the purpose of tone calibration and the example query provide enough context. A score of 5 would require explicit when-to-use versus the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_visual_templatesA
List the official visual template catalog with usage rules (T# IDs). Optional query filters by content type, e.g. 'annuncio corso'. Empty query returns the full catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations providing read-only or side-effect hints, the description carries the behavioral burden. It communicates that the tool lists an official catalog, returns usage rules with T# IDs, and behaves differently based on the query parameter. It does not go further to describe matching behavior, ordering, or whether any 'rules' are embedded in the returned data, but the core read-oriented behavior is reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loads the main purpose, and uses an example to clarify parameter usage. There is no filler or repetition of schema fields, and every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list-with-optional-filter tool, the description covers the tool's purpose, the optional query, and the empty-query behavior. The presence of an output schema compensates for not describing the return structure. Minor ambiguity remains about what 'content type' means and how T# IDs are used, but as a whole it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. The 'query' parameter is given semantics: it optionally filters by content type, with the example 'annuncio corso', and empty returns the full catalog. This is meaningful beyond the raw string schema. It could be slightly stronger, but it sufficiently explains the one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action, 'List the official visual template catalog', with a resource and an explicit mention of what makes these templates usable: the T# IDs. It does not explicitly contrast itself with the sibling tools search_guidelines or get_post_examples, so it stops short of full differentiation, but the verb and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when the query parameter is useful and that an empty query returns the full catalog, which provides practical guidance for using the tool. However, it does not explicitly state when to prefer this tool over sibling tools such as search_guidelines or get_post_examples, so the usage context remains partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_guidelinesB
Search the company brand and editorial rules. Returns matching rule blocks with their IDs (R#), e.g. 'tone course post linkedin'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of indicating behavior safely. It does disclose that the tool returns 'matching rule blocks with their IDs (R#)', which explains the shape of the output. However it omits details such as whether it is read-only, how many results are returned, or any limitations on query syntax.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences only: the first states purpose, the second gives return format and a clear example. Every sentence serves a direct purpose with no fluff. It is appropriately front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter search tool with an output schema already defined, the description is nearly complete. It explains the input style and output format for typical searches. It still lacks usage guidance relative to siblings, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter schema coverage is 0% since the query string has no description. The description compensates by giving a concrete example ('tone course post linkedin'), which clarifies that the query is free-form text and likely case-insensitive phrase style. This is meaningful added meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Search') and a precise resource ('company brand and editorial rules'). It distinguishes this as a search tool from the sibling tools (list_visual_templates, get_post_examples), though it could be more explicit about exactly how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not say when to use this tool rather than the siblings. It gives no context, precedence, or exclusion. The example query implies usage, but an agent is given no guidance to choose this over the alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
get_post_examples - First observed
list_visual_templates - First observed
search_guidelines
TDQS
Scored across 3 tools
Each tool targets a distinct knowledge resource: editorial rules, visual templates, and past post examples. The descriptions clearly distinguish search, list, and get operations despite all supporting query. An agent can reliably choose the correct tool for each content creation step.
All tool names follow the consistent snake_case verb_noun pattern: search_guidelines, list_visual_templates, get_post_examples. The verbs also accurately reflect the operation type, making the naming predictable and scannable.
With only three tools, the server is tightly focused on content knowledge retrieval. Each tool covers a core knowledge domain for content creation—rules, templates, and examples—without redundant or unnecessary additions.
The set covers the main content-making inputs: brand/editorial guidelines, visual template catalog, and performance-calibrated post examples. Minor gaps exist such as fetching a specific rule by ID or retrieving more than three examples, but the tool set supports its purpose effectively.
Maintenance
Related MCP Connectors
Governed company memory: search decisions, rules and client facts; propose updates for review.
Brand strategy and content-calendar context for agents, with human-confirmed approval gates.
Read-only canon of design and copy rules for AI agents to audit generated UI, served as resources.
Read-only AgentiScript concept search, catalog, authenticity, license, and approved asset discovery.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables AI agents to access and manage project guidelines, documentation, and context through a structured content system with template support and workflow management.3742 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query organizational architecture and governance constraints, returning evidence-grounded answers from documented structures.MIT
- AlicenseNot gradedqualityBmaintenanceProvides read-only knowledge search and guarded action proposal tools. Write-like actions require human approval and return traceable evidence with policy events.1MIT
- AlicenseAqualityBmaintenanceEnables agents to search and reference trusted, out-of-band ingested source state, run claim-bound document reviews, validate evidence-status proposals against admissibility guards, and build evidence matrices. It keeps proposal, evidence, admissibility, and adjudication separate so agents can propose epistemic statuses without creating the source facts, page locators, provenance, or missingness records that support them.5MIT