mcp-content-ops
An MCP server that enables agents to safely interact with CMS content, with deny-by-default write policies, type/field allowlists, and structured audit trails.
README
mcp-content-ops
An MCP server that lets an agent work with CMS content. The tools are the boring part — search, read, create a draft, set a field, publish. What took the thinking is what happens before any of them run.
Most content MCP servers we have looked at hand the model an API client and a credential with whatever permissions the integration account happens to have, which in a CMS is usually everything. The demo works. Then someone asks the agent to "tidy up the product pages" and it publishes forty drafts, because nothing in the system ever said it could not.
The scoping
Four gates, in order, and none of them live in the tool schema:
- Argument validation against the published schema. Unknown properties are rejected rather than dropped — a model that invents an argument has misunderstood the tool, and dropping it quietly hides that.
- Deny by default. Writes are off unless config turns them on. There is no permissive
default anywhere in
Policy. - Type and field allowlists. A type being readable does not make it writable, and a writable type does not make every field on it writable.
- Structured audit of every call, allowed or refused, with the reason.
The type a call is judged against comes from the stored item, never from the arguments. Letting the caller assert what kind of thing it is editing is letting the caller pick which policy applies.
A refused call comes back as a normal tool result with isError set, not a JSON-RPC error. The
model should see why it was refused and adapt; a protocol error means the client is broken,
which is a different conversation.
Running it
pip install -e ".[dev]"
python -m content_ops.server policy.example.json
pytest -q
The CMS behind it is an in-memory stub in cms.py — four methods, swap it for your content API.
What it does not do
No delete tool, on purpose. No resources or prompts, only tools. No auth: this is a stdio server and the trust boundary is the process that launched it. The schema validator covers the subset our own tool schemas use rather than all of JSON Schema.
Why not use an SDK
The MCP Python SDK is fine and for a larger server it is the right call. This one implements three methods over stdio, and the wire format is small enough that a dependency moving at the pace the SDKs currently move was the bigger risk.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.