An Agno agent that uses MCP tools and Skills to help with Substack content strategy. It connects to the Substack Author MCP server for data, uses Skills for domain expertise, tracks behavior with Opik, and can be exposed as an MCP server itself via AgentOS.
| Component | What | Why |
|---|---|---|
| Agno | Agent framework | Skills, MCPTools, AgentOS, CLI app |
| Claude Haiku 4.5 | LLM | Fast + cheap for tool orchestration |
| Substack Author MCP | Remote MCP server | Articles, notes, comments, performance data |
| Opik + OpenTelemetry | Observability | Trace every agent run, tool call, and skill activation |
| AgentOS | MCP wrapper | Expose the agent as an MCP server |
The agent loads 5 skills from skills/ that guide its behavior based on what you ask:
| Skill | Trigger | MCP Tools Used |
|---|---|---|
analyze-notes |
"How are my notes doing?" | get_substack_notes |
analyze-articles |
"What articles worked?" | get_substack_articles, get_article_performance, get_article_content |
analyze-comments |
"What are readers saying?" | get_article_comments |
content-ideas |
"What should I write next?" | get_substack_articles, get_article_performance, get_substack_notes |
brand-voice |
"What's my writing style?" | get_substack_articles, get_article_content |
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .envEdit .env:
ANTHROPIC_API_KEY=sk-ant-...
OTEL_EXPORTER_OTLP_ENDPOINT=https://www.comet.com/opik/api/v1/private/otel
OTEL_EXPORTER_OTLP_HEADERS=Authorization=<your-opik-api-key>,Comet-Workspace=default,projectName=substack-author-agentpython agent.pyTalk to the agent directly. Ask about your notes, articles, comments, content ideas, or writing voice. It streams responses and keeps conversation history in-memory.
python server.pyExposes the agent at http://localhost:7777/mcp with a single run_agent tool. Connect it to Claude Code, Cursor, or any MCP client.
| User Message | Agent Response |
|---|---|
![]() |
![]() |
| Trace Overview | Tool Calls | Skill Usage |
|---|---|---|
![]() |
![]() |
![]() |
substack-author-agent/
├── agent.py # CLI agent: Skills + MCPTools + Opik
├── server.py # AgentOS: exposes agent as MCP server
├── requirements.txt
├── .env.example
└── skills/
├── analyze-notes/SKILL.md
├── analyze-articles/SKILL.md
├── analyze-comments/SKILL.md
├── content-ideas/SKILL.md
└── brand-voice/SKILL.md




