shortformkit

Publish an MCP Server to the Official Registry

The exact files we use to publish our remote MCP server: one server.json, one GitHub Action, and a tag. After that, directories like Glama pick it up on their own.

The official MCP Registry is the catalog many MCP directories and clients read from. Publishing there once gets a server listed in several places without submitting it to each one. This is the setup we use for Shortform Kit; the run below published version 1.0.1 on 16 October 2026.

1. Test the endpoint first

Make sure the server answers initialize and tools/list over HTTPS before you publish it. Our MCP Server Tester does exactly that and shows whether each parameter has a description, which directories use for their quality scores.

2. Write server.json

Put it in the root of a public GitHub repository. For a remote server this is all it needs:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.YOUR-GITHUB-NAME/your-server",
  "title": "Your Server",
  "description": "One line, at most 100 characters, that says what the tools do",
  "version": "1.0.0",
  "websiteUrl": "https://example.com/docs/",
  "icons": [
    { "src": "https://example.com/icon-512.png", "mimeType": "image/png", "sizes": ["512x512"] },
    { "src": "https://example.com/icon.svg", "mimeType": "image/svg+xml", "sizes": ["any"] }
  ],
  "repository": { "url": "https://github.com/YOUR-GITHUB-NAME/your-server", "source": "github" },
  "remotes": [ { "type": "streamable-http", "url": "https://example.com/mcp" } ]
}

3. Publish from GitHub Actions

Save this as .github/workflows/publish.yml. The id-token: write permission lets mcp-publisher log in with GitHub OIDC, so there is no token to store:

name: Publish to MCP Registry
on:
  push:
    tags: ["v*"]
  workflow_dispatch:
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v5
      - name: Install mcp-publisher
        run: |
          curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
      - name: Authenticate to MCP Registry
        run: ./mcp-publisher login github-oidc
      - name: Publish server to MCP Registry
        run: ./mcp-publisher publish

Then tag a release: git tag v1.0.1 && git push origin v1.0.1. The run takes under a minute and ends with ✓ Successfully published and the server name and version.

4. Check the listing

curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=io.github.YOUR-GITHUB-NAME/your-server&version=latest"

The answer lists the latest version with your remotes and icons. Glama picked our server up from the registry without a separate submission and grades every tool; directories such as PulseMCP also read from the registry.

5. Make the listing worth clicking

Looking for servers to learn from? Our list of free remote MCP servers is built from the same registry.

How it works

  1. Write server.json Name, description, version, icons and the remote URL, in a public GitHub repo.
  2. Add the GitHub Action mcp-publisher logs in with GitHub OIDC and publishes.
  3. Tag a release Every new version tag publishes; check the listing with the registry API.

FAQ

How do I publish an MCP server to the official registry?

Add a server.json to a public GitHub repo, run mcp-publisher login github-oidc and mcp-publisher publish in a GitHub Action with id-token: write, and push a version tag. The exact files are on this page.

What is the description limit in server.json?

100 characters. The registry schema sets maxLength 100 for description; it is the one-line summary directories show.

Do I need a new version for every change?

Bump version in server.json before each publish, for example from 1.0.0 to 1.0.1, so clients and directories see the update as the latest version.

How do I add an icon to my MCP server listing?

Add an icons array to server.json with src, mimeType (PNG, JPEG, SVG or WebP) and sizes, then publish a new version.

More free tools

Last updated: 2026-10-14 · by Diego Brügger, Senior video editor, Zürich