mataroa-mcp
An MCP server that lets you manage your Mataroa blog through natural language in Claude Desktop, Claude Code, or any MCP-compatible AI client.
What you can do
Tell Claude things like:
- "Show me all my blog posts"
- "Write a post about my weekend hike and save it as a draft"
- "Publish my sourdough post"
- "Are there any comments waiting for approval?"
- "Delete the draft called testing-123"
- "Create an About page for my blog"
Claude will call the right tool automatically.
Preview
Demo conversation link
Setup (5 minutes)
1. Get your Mataroa API key
- Go to mataroa.blog and log in (or create a free account).
- Open Dashboard → API and copy your API key.
2. Install the server
You need Python 3.10 or later. The package is published on PyPI — install it with pip:
pip install mataroa-mcp
Or, if you have uv installed, you can skip the install step entirely and run the latest version on demand with uvx:
uvx mataroa-mcp
3. Add to Claude Desktop
Open your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
If there is no "mcpServers" key, add it at the top level alongside any existing keys:
{
"mcpServers": {
"mataroa": {
"command": "mataroa-mcp",
"args": [],
"env": {
"MATAROA_API_KEY": "paste-your-key-here"
}
}
},
"...your other existing config keys...": "..."
}
If you used uvx instead of pip install, replace "command": "mataroa-mcp" and "args": [] with:
"command": "uvx",
"args": ["mataroa-mcp"]
4. Restart Claude Desktop
Quit and reopen Claude Desktop. You should see a small plug icon in the chat bar indicating MCP tools are active.
5. Test it
Type: "Show me my blog posts" — Claude should list them.
Add to Claude Code
Create or edit .mcp.json in your project root:
{
"mcpServers": {
"mataroa": {
"command": "mataroa-mcp",
"args": [],
"env": {
"MATAROA_API_KEY": "paste-your-key-here"
}
}
}
}
Replace
"command": "mataroa-mcp", "args": []with"command": "uvx", "args": ["mataroa-mcp"]if you installed viauvxinstead ofpip.
Available tools
| Tool | What it does |
|---|---|
list_posts |
List all posts (published + drafts) |
list_drafts |
List only unpublished drafts |
get_post |
Get a single post by slug |
create_post |
Create a new post |
update_post |
Edit an existing post |
delete_post |
Permanently delete a post |
publish_post |
Publish a draft (sets today's date, or a date you choose) |
unpublish_post |
Revert a published post back to draft |
list_comments |
List all comments (or just for one post) |
list_pending_comments |
List comments awaiting moderation |
approve_comment |
Approve a pending comment |
delete_comment |
Delete a comment |
list_pages |
List all pages |
get_page |
Get a single page by slug |
create_page |
Create a new page |
update_page |
Edit an existing page |
delete_page |
Permanently delete a page |
Notes
- API key is never stored in code — it's always read from the
MATAROA_API_KEYenvironment variable. - Mataroa has no rate limiting, so you can make requests freely.
- Blog-level settings (title, custom domain, etc.) are not accessible via the Mataroa API and therefore not exposed here.
- Draft posts have
published_at: null. Publishing sets it to a date; unpublishing clears it.
Running tests
# Install test dependencies
pip install -e .
pip install pytest pytest-asyncio respx
# Unit tests (no API key needed)
python -m pytest tests/test_client.py tests/test_server.py -v
# Integration tests (requires a real Mataroa API key)
$env:MATAROA_API_KEY="your-key"; python -m pytest tests/test_integration.py --run-integration -v
Running the server locally
To test the server outside of Claude Desktop, use stdio transport (default):
# Set your API key and run the server (stdio transport for MCP clients)
$env:MATAROA_API_KEY="your-key"; python -m mataroa_mcp.server
The server communicates via stdio by default, which is the standard MCP transport.
For HTTP testing (advanced): To test with HTTP endpoints, modify the main() function in server.py to use:
mcp.run(transport="sse") # or "streamable-http"
Then the server will listen on http://127.0.0.1:8000.
Troubleshooting
"Could not attach MCP server mataroa" in Claude Desktop
Causes:
- The
mataroa-mcpcommand isn't on yourPATH(Claude Desktop can't find the executable) MATAROA_API_KEYis missing or empty in the config's"env"block- Port 8000 already in use from a previous server instance (only relevant if you're running with HTTP transport)
Solutions:
- Confirm the install worked and the command is reachable: run
mataroa-mcp(oruvx mataroa-mcp) directly in a terminal — it should print an error about the missing API key, not "command not found" - If
mataroa-mcpisn't found, useuvxinstead (it doesn't depend on yourPATH), or provide the absolute path to the installed script (e.g.C:\Users\you\AppData\Local\Programs\Python\Python3xx\Scripts\mataroa-mcp.exeon Windows, or~/.local/bin/mataroa-mcpon macOS/Linux) - Double-check
MATAROA_API_KEYis set correctly in the config's"env"block - Make sure no other process is using port 8000:
netstat -ano | findstr :8000 - Restart Claude Desktop after making changes to
claude_desktop_config.json
Tests fail with "async def functions are not natively supported"
This happens if pytest-asyncio isn't installed properly. Run:
pip install pytest-asyncio
Then restart your Python environment or terminal.
License
MIT
Metadata
Release files for mataroa-mcp 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mataroa_mcp-0.1.2.tar.gz | 187.3 kB | Without provenance | Details for mataroa_mcp-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mataroa_mcp-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for mataroa_mcp-0.1.2-py3-none-any.whl |
Total release size: 196.5 kB
Release files / mataroa_mcp-0.1.2.tar.gz
| Download URL | mataroa_mcp-0.1.2.tar.gz |
|---|---|
| Size | 187.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4c42492fa9ae709501255491f22c1d6131f3e47ed6945fb5c7cb0546acef7193
|
|
BLAKE2b-256 checksum How to use checksums |
709526991247fb50d40df26bcfd3d4cfbf67245e9cf7a6661ff58137f1fe70d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / mataroa_mcp-0.1.2-py3-none-any.whl
| Download URL | mataroa_mcp-0.1.2-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a6ea783a2a38eb2414e551f9a100728b1ebfcfc2d1ab5f87f5d486b9e029bda9
|
|
BLAKE2b-256 checksum How to use checksums |
9a0189235543196b0fc14300641bb9c70e81eaa6dc79e670819963e160714d7f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Security for mataroa-mcp 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.