Skip to main content
Glama
sfolador

devnull-mcp

by sfolador

devnull-mcp

An MCP server for /dev/null, the plain-text social network for developers. It lets Claude (or any MCP client) commit to /dev/null as you, and read public profiles and commits.

There is no login. A commit is signed locally with ssh-keygen -Y sign, using an SSH key that is on your GitHub account, and /dev/null checks the signature against the keys GitHub publishes for you, exactly like the official curl -fsSL https://dev-null.sh/commit | bash script does.

Tools

Tool

What it does

devnull_commit

Publish a commit (up to 4000 characters), optionally as a reply (reply_to takes a short hash, UUID or link).

devnull_whoami

Shows which local SSH key /dev/null recognizes as yours. Posts nothing.

devnull_get_user

Public profile of a user by GitHub username.

devnull_list_commits

A user's latest commits (or replies), 20 per page with a cursor.

devnull_get_commit

One commit by UUID or link.

Related MCP server: notes-mcp

Requirements

  • Node.js 20 or newer, ssh-keygen (OpenSSH 8.0+).

  • An Ed25519 or RSA key that is on your GitHub account, either loaded in your SSH agent or as ~/.ssh/<name> with ~/.ssh/<name>.pub next to it. Passphrase-protected keys must be in the agent (ssh-add ~/.ssh/<name>), because the server has no terminal to ask for the passphrase.

  • Having signed in once on https://dev-null.sh with GitHub.

Install

npm install
npm run build

Register it with Claude Code (user scope, so it is available in every project):

claude mcp add --scope user devnull -- node /absolute/path/to/devnull-mcp/dist/index.js

Or add it to any MCP client configuration:

{
  "mcpServers": {
    "devnull": {
      "command": "node",
      "args": ["/absolute/path/to/devnull-mcp/dist/index.js"]
    }
  }
}

Environment variables

Variable

Purpose

DEVNULL_SSH_KEY

Path to the private key to sign with, when auto-discovery picks the wrong one. Its public key is derived with ssh-keygen -y.

DEVNULL_URL

Another instance, for development. Must be https://, or http://localhost.

How a commit works

  1. The public keys from ssh-add -L and ~/.ssh/*.pub are sent to POST /api/cli/key-lookups, which answers with the one that belongs to a /dev/null user. Public keys are public: GitHub publishes them at https://github.com/<you>.keys.

  2. The payload timestamp\nnonce\nreply_to\nmessage is signed with that key in the devnull-commit namespace. The signature is only valid for /dev/null commits.

  3. The payload and signature go to POST /api/cli/commits, which answers with the commit link.

Private keys are never read by this code: ssh-keygen or the agent uses them. Temporary files are written to a fresh private directory that is deleted afterwards.

Development

npm test          # node:test suite, includes a real ssh-keygen sign/verify round trip
npm run typecheck
npm run dev       # run from sources over stdio

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables GitHub repository operations (list/read files, create branches, commit files, open/list PRs) via an authless remote MCP server that keeps your GitHub token encrypted on Cloudflare, with access limited to allowed repositories.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Remote MCP server that exposes a personal git repository of markdown notes to Claude, enabling reading, writing, searching, and running scripts with automatic git commits and GitHub OAuth authentication.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A single-user MCP server that exposes your GitHub activity to Claude via three read-only tools: recent commits, open pull requests, and repository summaries. Deployed as a Vercel function using Streamable HTTP.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude and other MCP clients to read and write GitHub repositories, pull requests, issues, files, branches, commits, releases, and more using a personal access token without OAuth.
    119 npm
    MIT