mcpField
D
devto

devto

github.com/acedatacloudMarketing & growth17205 installsUpdated today
Repository

About devto

A skill for managing dev.to articles through the Forem API using curl and jq. It supports drafting, publishing, editing, and inspecting articles, including their engagement statistics.

Key features

  1. 01Confirm API credentials and account identity
  2. 02Create drafts or publish articles
  3. 03Edit articles and publish drafts
  4. 04List articles and inspect content and stats
  5. 05Set canonical URL for cross-posting

Use cases

  1. 01Save a Markdown article as a draft
  2. 02Publish or update an article on dev.to
  3. 03Review article views, reactions, and comments

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/acedatacloud/skills --skill devto

After installing, type/devtoin Claude Code to confirm it loaded.

Details

From the project README

Call the Forem API v1 (dev.to) with curl + jq. The user's API key is in $DEVTO_API_KEY; every call needs the headers api-key: $DEVTO_API_KEY and Accept: application/vnd.forem.api-v1+json. Base URL: https://dev.to/api.

Errors come back as JSON with an error / status field — show them verbatim. 401 means the API key is invalid → the user must re-connect the DEV connector.

Always start by confirming the key and learning the account:

curl -sS -H "api-key: $DEVTO_API_KEY" -H "Accept: application/vnd.forem.api-v1+json" \
  "https://dev.to/api/users/me" | jq '{username, name}'

Publish an article

Confirm with the user before publishing publicly. Default to a draft (published:false) unless they explicitly say publish/now.

TITLE="My title"
BODY_MD="$(cat article.md)"   # full Markdown body
jq -n --arg t "$TITLE" --arg b "$BODY_MD" \
  '{article:{title:$t, body_markdown:$b, published:false, tags:["ai","webdev"]}}' \
| curl -sS -X POST "https://dev.to/api/articles" \
    -H "api-key: $DEVTO_API_KEY" \
    -H "Accept: application/vnd.forem.api-v1+json" \
    -H "Content-Type: application/json" \
    -d @- \
| jq '{id, url, published}'

To publish a draft later (or edit), PUT /api/articles/{id} with the same shape (set published:true). Front-matter inside body_markdown (a --- block) can also carry title, tags, series, canonical_url, cover_image.

  • Canonical URL: when cross-posting, set "canonical_url":"https://your-blog/original" so DEV points SEO back to the source — important for the article→video / cross-publishing flow.

List / inspect my articles

# My published + draft articles (paginated; per_page max 1000).
curl -sS -H "api-key: $DEVTO_API_KEY" -H "Accept: application/vnd.forem.api-v1+json" \
  "https://dev.to/api/articles/me/all?per_page=30" \
  | jq '.[] | {id, title, published, page_views_count, public_reactions_count, comments_count}'

# A single article's full content + stats.
curl -sS -H "api-key: $DEVTO_API_KEY" -H "Accept: application/vnd.forem.api-v1+json" \
  "https://dev.to/api/articles/ARTICLE_ID" | jq '{title, url, reactions: .public_reactions_count, views: .page_views_count}'

Gotchas

  • Tags: max 4, lowercase, no spaces (e.g. webdev, machinelearning).
  • Rate limit: article create/update is throttled (a few per 30s); space out bulk publishes or you'll get 429.
  • body_markdown is the source of truth — if you put a --- front-matter block at the top, its fields override the JSON article fields.

Record the output

After you successfully publish and obtain the live result URL, call the built-in publish_artifact tool ONCE so the user can track this deliverable in My Outputs:

publish_artifact(kind="article", channel="devto", title="<title>", url="<the REAL returned URL>", status="delivered")

Use the real returned URL — never fabricate one. Call it once per published item, only after delivery is confirmed; skip it (or use status="failed") if publishing failed. See _shared/artifacts.md.

Comments

Markdown supported