Skip to main content
Glama

DevTo-MCP

A production-ready Model Context Protocol (MCP) server for the DEV Community (Forem) API. Manage articles, comments, users, tags, organizations, and more through any MCP-compatible client.

CI npm version License: MIT Node.js TypeScript

Quick Start

Install in VS Code

Install the DevTo MCP server in VS Code with one click:

Note: After installing, replace YOUR_API_KEY with your actual DEV Community API key from dev.to/settings/extensions.

Install in Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "devto": {
      "command": "npx",
      "args": ["-y", "@furkankoykiran/devto-mcp"],
      "env": {
        "DEVTO_API_KEY": "your_api_key_here"
      }
    }
  }
}

Install in Cursor

Add to your Cursor MCP settings:

{
  "mcpServers": {
    "devto": {
      "command": "npx",
      "args": ["-y", "@furkankoykiran/devto-mcp"],
      "env": {
        "DEVTO_API_KEY": "your_api_key_here"
      }
    }
  }
}

Related MCP server: ICP Control Plane MCP Server

Features

  • 17 tools across 8 domains for comprehensive DEV Community interaction

  • Full Forem API V1 support with proper authentication headers

  • Robust API client with request timeouts, automatic retries with exponential backoff, and rate-limit awareness

  • Written in TypeScript with strict type safety

  • Zod input validation on all tool parameters

  • Structured error messages with status codes, endpoints, and request IDs

  • Zero external HTTP dependencies (uses native fetch)

Prerequisites

Installation

DEVTO_API_KEY=your_key npx -y @furkankoykiran/devto-mcp

Global install

npm install -g @furkankoykiran/devto-mcp

From source

git clone https://github.com/furkankoykiran/DevTo-MCP.git
cd DevTo-MCP
npm install
npm run build

Configuration

Set your DEV Community API key as an environment variable:

export DEVTO_API_KEY=your_api_key_here

Available Tools

Articles

Tool

Description

get_articles

List published articles with filters (tag, username, state, top, pagination)

get_article_by_id

Get full article details by numeric ID

create_article

Create a new article or draft

update_article

Update an existing article

get_my_articles

Get authenticated user's articles (published, unpublished, or all)

Comments

Tool

Description

get_comments

Get threaded comments for an article or podcast episode

get_comment_by_id

Get a single comment by ID code

Users

Tool

Description

get_authenticated_user

Get the authenticated user's profile

get_user_by_username

Get any user's public profile

Tags

Tool

Description

get_tags

List available tags with pagination

get_followed_tags

Get tags followed by the authenticated user

Organizations

Tool

Description

get_organization

Get organization details by username

get_organization_articles

List an organization's published articles

get_organization_users

List users in an organization

Reading List

Tool

Description

get_reading_list

Get the authenticated user's bookmarked articles

Followers

Tool

Description

get_followers

Get the authenticated user's followers

Error Handling & Resilience

The API client includes production-grade resilience features:

  • Timeouts: All requests have a 30-second timeout via AbortSignal

  • Retries: Automatic retry with exponential backoff (1s → 2s → 4s) for transient errors (HTTP 429, 5xx)

  • Rate Limiting: Respects Retry-After headers; surfaces x-ratelimit-remaining in error messages

  • Structured Errors: ForemApiError includes status code, endpoint, HTTP method, request ID, and rate-limit info

Known Limitations

  • Reactions: The toggle_reaction tool is currently disabled due to API 401 Unauthorized errors, likely caused by insufficient scopes on standard API keys. This feature may be re-enabled in a future release if API permissions are clarified.

  • Draft Articles: Retrieval of draft articles via get_article_by_id uses a fallback mechanism (searching user's full article list) because the public endpoint does not support drafts. This ensures seamless access for authenticated users.

Environment Variables

Variable

Required

Description

DEVTO_API_KEY

Yes

Your DEV Community API key

Development

# Install dependencies
npm install

# Build
npm run build

# Lint
npm run lint

# Type check
npm run typecheck

# Unit tests
npm test

# Integration tests (requires DEVTO_API_KEY)
DEVTO_API_KEY=your_key npm run test:integration

# Run locally
DEVTO_API_KEY=your_key node dist/index.js

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Security

For security concerns, please see SECURITY.md.

License

This project is licensed under the MIT License — see the LICENSE file for details.

Acknowledgments

Available Tools

16 tools
create_articleB

Create a new article on DEV Community. Set published to false to save as draft.

Inputs: title (required), tags, series, published, +5 more.

get_article_by_idA

Get a published article by its numeric ID. Returns full article details including body content.

Inputs: id (required).

get_articlesA

List published articles from DEV Community with optional filters. Returns articles ordered by descending popularity by default.

Inputs: tag, top, page, tags, +5 more.

get_authenticated_userA

Get the profile of the currently authenticated DEV Community user (the owner of the API key).

Inputs: no named parameters.

get_comment_by_idA

Get a single comment by its ID code. Returns the comment with its nested replies.

Inputs: id (required).

get_commentsA

Get comments for an article or podcast episode as threaded conversations. Returns top-level comments with nested replies.

Inputs: a_id, p_id.

get_followed_tagsA

Get the tags followed by the authenticated user.

Inputs: no named parameters.

get_followersA

Get the authenticated user's followers on DEV Community. Supports pagination with sort by creation date.

Inputs: page, sort, per_page.

get_my_articlesB

Get the authenticated user's own articles. Can filter by published, unpublished, or all.

Inputs: page, status, per_page.

get_organizationB

Get details about a DEV Community organization by its username/slug.

Inputs: username (required).

get_organization_articlesC

Get articles published by an organization on DEV Community.

Inputs: username (required), page, per_page.

get_organization_usersB

Get users who belong to a DEV Community organization.

Inputs: username (required), page, per_page.

get_reading_listA

Get the authenticated user's reading list (bookmarked articles). Supports pagination.

Inputs: page, per_page.

get_tagsB

List available tags from DEV Community with pagination.

Inputs: page, per_page.

get_user_by_usernameB

Get a user's public profile by their username or numeric ID.

Inputs: username (required).

update_articleB

Update an existing article by its ID. Only include fields you want to change.

Inputs: id (required), tags, title, series, +6 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 16 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: articles, comments, users, followers, tags, organizations, and reading list. No two tools have overlapping purposes.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern with snake_case (e.g., get_article_by_id, create_article). Verbs are uniformly 'get', 'create', or 'update'.

    Tool Count4/5

    16 tools cover multiple domains of DEV Community API. While on the higher end of the typical range, each tool serves a clear purpose without redundancy.

    Completeness2/5

    Missing key CRUD operations such as delete article, create/update comment, follow/unfollow tag, and add/remove reading list. Agents cannot perform full lifecycle actions.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers