npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@archy-ai/blog-post-mcp

v0.0.3

Published

Minimal MCP server that exposes tools to: - summarize the current git workspace changes - create/update/publish blog posts - trigger featured image / featured video generation via the existing Archy admin API

Readme

Blog Post MCP (Archy)

Minimal MCP server that exposes tools to:

  • summarize the current git workspace changes
  • create/update/publish blog posts
  • trigger featured image / featured video generation via the existing Archy admin API

Env vars

  • ARCHY_BLOG_BASE_URL (default: http://localhost:4280)
  • ARCHY_PUBLISHER_KEY (recommended; per-user key sent as x-archy-publisher-key)
  • ARCHY_INTEGRATIONS_API_KEY (legacy/shared integration key; sent as Bearer or x-archy-api-key)
  • ARCHY_API_KEY_HEADER (optional: authorization, x-archy-api-key, or x-archy-publisher-key; default: authorization)

Auth notes

  • In your API, server-to-server auth is controlled by INTEGRATIONS_API_KEY + INTEGRATIONS_API_ROLES.
    • Publishing and AI image/video require admin role.
    • Draft creation can work with writer role.
  • For local development you can bypass auth entirely by setting LOCAL_DEV_ADMIN_BYPASS=true in the API environment.

Run

Standalone (recommended)

After publishing this package, you can run it without cloning meet.archy-ai.com:

ARCHY_BLOG_BASE_URL=https://meet.archy-ai.com \
ARCHY_INTEGRATIONS_API_KEY=... \
npx -y @archy-ai/blog-post-mcp

Notes:

  • The archy_workspace_summary tool is optional; it will only be useful when run in a folder that is a git repo.

CLI flags (no env vars)

The published binary also supports flags that populate env vars internally (useful for VS Code MCP configs):

npx -y @archy-ai/blog-post-mcp \
	--base https://meet.archy-ai.com \
	--header x-archy-publisher-key \
	--publisher-key pk_...
	--timeout-ms 120000 \
	--debug

Notes:

  • --debug logs only to stderr (stdout stays clean for MCP protocol).
  • --timeout-ms controls how long the MCP waits for API responses before aborting (useful when image/video prompts are complex).

From source

cd meet.archy-ai.com/tools/blog-post-mcp
npm install
ARCHY_BLOG_BASE_URL=http://localhost:4280 \
ARCHY_INTEGRATIONS_API_KEY=... \
node ./index.mjs

You can also pass flags when running from source:

node ./index.mjs \
	--base http://localhost:7072 \
	--header x-archy-publisher-key \
	--publisher-key pk_...

Smoke test (recommended)

Use this when you want a repeatable, one-command verification that:

  • VS Code can spawn the MCP server (stdio)
  • the full toolchain works end-to-end
  • the backing local SWA dev server is reachable (ARCHY_BLOG_BASE_URL)

What it does

The smoke script runs only via MCP tool calls (not curl):

  1. archy_blog_create_draft (creates a dev-only draft)
  2. archy_blog_ai_draft (fills body + SEO)
  3. archy_blog_ai_image (generates a featured image)
  4. archy_blog_attach_feature_image
  5. archy_blog_ai_video (starts a featured video job conditioned on the image)
  6. archy_blog_ai_video_status (polls until succeeded/failed)
  7. archy_blog_attach_feature_video
  8. archy_blog_publish

Prereqs

  • Start your local SWA stack so http://localhost:4280 is serving:
    • npm run swa:dev (from meet.archy-ai.com)
  • Auth:
    • Local dev: set LOCAL_DEV_ADMIN_BYPASS=true in the API environment (recommended), OR
    • Provide ARCHY_INTEGRATIONS_API_KEY / INTEGRATIONS_API_KEY so the admin endpoints authorize.

Run

From meet.archy-ai.com:

npm run mcp:blog:smoke

Optional flags:

node ./scripts/archy-blog-mcp-smoke.mjs \
	--base http://localhost:4280 \
	--title "MCP Smoke Test (manual title)" \
	--video-polls 30 \
	--video-poll-ms 5000

Expected result

On success, it prints a single JSON object like:

{
	"ok": true,
	"baseUrl": "http://localhost:4280",
	"post": {
		"id": "...",
		"slug": "...",
		"status": "published",
		"publishedAt": "..."
	},
	"featureImage": { "assetId": "...", "url": "..." },
	"featureVideo": { "requestId": "...", "assetId": "...", "url": "..." }
}

If it fails, it exits non-zero and prints an error with context.

Agentic composer

These tools help an agent compose a validated TipTap/ProseMirror doc body from a safe “blocks” spec, then write it to a post.

Tools

  • archy_blog_get_post: fetch a post by id
  • archy_blog_compose_doc: convert blocks → TipTap doc JSON (no network)
  • archy_blog_set_body_from_blocks: replace the post body with blocks
  • archy_blog_append_blocks: append blocks to an existing TipTap doc

Block format (overview)

Each block is an object with a type.

Supported type values:

  • heading (attrs: level 1-3; content from text or inlines)
  • paragraph (content from text or inlines)
  • quote (paragraphs: string[])
  • bulletList, orderedList (items: string[])
  • image (src, optional alt)
  • video (src)
  • embed (url, optional provider)
  • slider (items: [{ src, alt?, assetId? }])
  • card
  • cardSet (cards: [...])
  • cta

Inline rich text is supported in heading and paragraph via:

inlines: [{ text, bold?, italic?, href? }] where href must be http(s)://... or a site-relative path like /pricing.