SkillAgentSearch skills...

dev-to-mcp

DEV.to MCP Server — fast, single-binary Model Context Protocol server for the Forem/DEV.to API. Go + stdio, no cold starts.

Install / Use

claude mcp add tiagovilasboas -- npx -y github:tiagovilasboas/dev-to-mcp

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

81/100

Supported Platforms

Claude Code
Claude Desktop

Our assessment of dev-to-mcp

dev-to-mcp scores 81/100 on our quality scale, 732nd of 933 AI & Machine Learning skills we index.

Its MCP Server is 8.7 KB long, well organised into 10 sections with 8 code examples: a thorough specification that gives an agent plenty to work with.

It has 3 GitHub stars, so there is little community track record yet; judge it on its content.

Substance
29/30
Structure
20/20
Description
15/15
Adoption
3/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 26 days ago, so dev-to-mcp is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

dev-to-mcp compared with similar skills

All 4 of these similar skills score higher than dev-to-mcp; compare them before choosing.

SkillScoreStarsUpdatedFormat
dev-to-mcp (this skill)by tiagovilasboas81326d agoMCP Server
Agent-Reachby Panniantong100106.0k4d agoCLAUDE.md
claude-memby thedotmack100104.2ktodayCLAUDE.md
Understand-Anythingby Egonex-AI10088.8k3d agoCLAUDE.md
headroomby headroomlabs-ai10078.2ktodayCLAUDE.md

Frequently asked questions

How do I install dev-to-mcp?
Run claude mcp add tiagovilasboas -- npx -y github:tiagovilasboas/dev-to-mcp. The install tabs above show the steps for each supported agent.
Which AI agents does dev-to-mcp work with?
It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
Is dev-to-mcp safe to use?
It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is dev-to-mcp still maintained?
The repository was last updated 26 days ago, so dev-to-mcp is actively maintained.
<p align="center"> <img src=".github/cover.png" alt="DEV.to MCP Server" width="100%"> </p> <h1 align="center">dev-to-mcp</h1> <p align="center"> <b>DEV.to MCP Server — fast, single-binary Model Context Protocol server for the Forem API</b><br> <sub>Written in Go. Speaks stdio. No cold starts, no background servers.</sub> </p> <p align="center"> <a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.27+-00ADD8?style=flat-square&logo=go&logoColor=white" alt="Go"></a> <a href="https://modelcontextprotocol.io/"><img src="https://img.shields.io/badge/MCP-official%20sdk-5A45FF?style=flat-square" alt="MCP"></a> <a href="#"><img src="https://img.shields.io/badge/transport-stdio-2ea44f?style=flat-square" alt="Transport"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License"></a> </p> <p align="center"> <a href="#-why-this-one">Why this one?</a> • <a href="#-install">Install</a> • <a href="#-tools">Tools</a> • <a href="#%EF%B8%8F-configure">Configure</a> • <a href="#-security">Security</a> </p>

A Model Context Protocol (MCP) server for the DEV.to / Forem API. Your MCP client (Kiro, Cursor, Claude Desktop, VS Code, …) launches the binary on demand and talks to it over stdin/stdout. There is no port and no long-lived HTTP server to fall over.

[!NOTE] AI-assisted project. This server was designed and implemented with AI assistance (pair-programmed with an agent), then reviewed and tested by a human. Every design decision, security choice, and the code itself were verified before landing. Contributions are welcome under the same bar: reviewed and tested.

<br>

🎯 Why this one?

There are other DEV.to MCP servers. Here's what makes this one different:

| | dev-to-mcp (this) | Python alternatives | Hosted gateways | |:--|:--:|:--:|:--:| | Cold start | ⚡ Instant | 🐌 Runtime + deps | 🌐 Network latency | | Dependencies | None (single binary) | Python + uv/pip | Third-party service | | Secret handling | 🔐 macOS Keychain native | Env var only | Varies | | Transport | stdio (client owns process) | stdio | HTTP | | Self-hosted | ✅ You control everything | ✅ | ❌ | | Write tools | ✅ create + update | ✅ | Sometimes | | Crash behavior | Tool error → model retries | Process dies | 5xx |

TL;DR: If you want a DEV.to MCP that starts instantly, keeps your API key in the OS vault, and never phones home — this is the one.

<br>

✨ Why Go + stdio

| | | |:--|:--| | 📦 Single binary | No npx or node_modules download at startup — no cold-start timeout or network flakiness | | 🔌 stdio, not HTTP | The client owns the process. No :3000 pinned in the background, no session bookkeeping | | 🛡️ Resilient | A failed dev.to call becomes a tool error the model can read and retry, not a dead server | | 📝 Clean channel | Logs go to stderr; stdout stays a pristine JSON-RPC stream |

Built on the official modelcontextprotocol/go-sdk.

<br>

🛠 Tools

| Tool | Auth | Description | |:-----|:----:|:------------| | get_articles | — | List articles; filter by username, tag, state, or top (days) | | get_my_articles | 🔑 | List your unpublished drafts, published articles, or all articles | | get_article | — | One article by numeric id or path (username/article-slug) | | get_user | — | User by id or username | | get_tags | — | Popular tags, paginated | | get_comments | — | Comment tree for an article_id | | search_articles | — | Search articles by query | | create_article | 🔑 | Create an article (draft by default) | | update_article | 🔑 | Update an article by id |

Tip: Public read tools work with no key. get_my_articles uses the API key and defaults to unpublished drafts. Publishing is create_article / update_article with published: true.

<br>

📦 Install

Requires Go 1.27+.

git clone https://github.com/tiagovilasboas/dev-to-mcp.git
cd dev-to-mcp
go build -o dist/dev-to-mcp .

This produces a self-contained binary at dist/dev-to-mcp. Note the absolute path — you will point your MCP client at it.

<br>

🔑 Get a dev.to API key

The write tools need a personal API key. Generate one at:

dev.to → Settings → Extensions → DEV Community API Keys
👉 Direct link

Read tools need nothing.

<br>

🔐 Store the key securely

Never put your key in a config file that can be committed to git.

<details open> <summary><b>macOS — Keychain</b> (recommended)</summary> <br>

The binary reads the key straight from the macOS Keychain:

security add-generic-password -s dev-to-mcp -a "$(id -un)" -w "YOUR_DEV_TO_API_KEY" -U

That's it. The server finds it automatically (service dev-to-mcp, account = your OS user).

</details> <details> <summary><b>Linux / Windows — environment via a vault</b></summary> <br>

Native Keychain lookup is macOS-only. On Linux/Windows, feed the key through DEV_TO_API_KEY:

| Vault | Example | |:------|:--------| | 1Password CLI | op run -- dist/dev-to-mcp with DEV_TO_API_KEY=op://vault/dev-to/key | | pass | DEV_TO_API_KEY=$(pass dev-to/api-key) dist/dev-to-mcp |

</details> <br>

⚙️ Configure

Point your MCP client at the compiled binary using its absolute path.

<details open> <summary><b>Kiro</b></summary>

.kiro/settings/mcp.json (workspace) or ~/.kiro/settings/mcp.json (global)

{
  "mcpServers": {
    "dev-to": {
      "command": "/absolute/path/to/dev-to-mcp/dist/dev-to-mcp"
    }
  }
}
</details> <details> <summary><b>Cursor</b></summary>

~/.cursor/mcp.json or .cursor/mcp.json

{
  "mcpServers": {
    "dev-to": {
      "command": "/absolute/path/to/dev-to-mcp/dist/dev-to-mcp"
    }
  }
}
</details> <details> <summary><b>Claude Desktop</b></summary>

claude_desktop_config.json

{
  "mcpServers": {
    "dev-to": {
      "command": "/absolute/path/to/dev-to-mcp/dist/dev-to-mcp"
    }
  }
}
</details> <details> <summary><b>VS Code</b> (Continue / Cline / other MCP extensions)</summary>
{
  "mcpServers": {
    "dev-to": {
      "command": "/absolute/path/to/dev-to-mcp/dist/dev-to-mcp"
    }
  }
}
</details> <details> <summary><b>With environment variable</b> (Linux/Windows)</summary>

Add an env block — and keep that file out of git:

{
  "mcpServers": {
    "dev-to": {
      "command": "/absolute/path/to/dev-to-mcp/dist/dev-to-mcp",
      "env": { "DEV_TO_API_KEY": "YOUR_DEV_TO_API_KEY" }
    }
  }
}
</details> <br>

🛡 Security

<table> <tr> <td width="50%">

What this server does

  • 🔒 Vault-first key handling — on macOS the key is read from Keychain
  • 🚫 The token is never logged
  • 🔐 No key in the repo — nothing hardcoded
  • ➡️ Token pass-through only — sent to dev.to and nowhere else
  • 📄 Responses pass through unchanged — no third-party endpoints
</td> <td width="50%">

What you should do

  • Keep your key in a vault (Keychain / 1Password / pass)
  • Ensure any file with DEV_TO_API_KEY is git-ignored
  • Rotate the key at dev.to if you suspect exposure
</td> </tr> </table>

[!WARNING] Write tools (create_article, update_article) publish to your real dev.to account with no extra confirmation — approval is expected from your MCP client's tool-approval prompt. Review calls before you approve.

<br>

📋 Configuration reference

All optional. Sensible defaults mean macOS users configure nothing.

| Variable | Default | Purpose | |:---------|:--------|:--------| | DEV_TO_API_KEY | — | API key fallback when Keychain has no entry | | DEVTO_KEYCHAIN_SERVICE | dev-to-mcp | macOS Keychain service name | | DEVTO_KEYCHAIN_ACCOUNT | current OS user | macOS Keychain account name |

Resolution order: Keychain → DEV_TO_API_KEY

<br>

📁 Project layout

main.go                        bootstrap: resolve token, build server, run stdio
internal/keychain/keychain.go  read a secret from the macOS Keychain (no CGO)
internal/devto/
├── client.go                  HTTP transport: get / writeArticle / do
├── endpoints.go               one method per dev.to endpoint
├── tools.go                   register the 9 MCP tools
└── inputs.go                  typed tool inputs + query/body builders

One responsibility per file. Responses flow back as raw dev.to JSON — the consumer is an LLM that reads JSON, so there are no response structs to keep in sync with the upstream API.

<br>
<p align="center"> <a href="CONTRIBUTING.md">Contributing</a> • <a href="LICENSE">License</a> </p> <p align="center"> <sub>MIT License • Made with 🤖 + 👨‍💻</sub> </p>

Related Skills

View on GitHub
GitHub Stars3
CategoryAI
Updated26d ago
Forks0

Languages

Go

Trust signals

92/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

1 low