# Submitting

Do not submit from a build, a test, or this repository. Run these by hand after `https://ipa.raymati.com` answers on the public internet.


## MCP Registry

The registry is a preview. The published schema can still break. Do not publish from this repository.

- Authentication: <https://modelcontextprotocol.io/registry/authentication>
- Quickstart: <https://modelcontextprotocol.io/registry/quickstart>
- Remote servers: <https://modelcontextprotocol.io/registry/remote-servers>
- Default registry: `https://registry.modelcontextprotocol.io`

The name is `com.raymati/ipa`. DNS domain verification for `raymati.com` grants `com.raymati.*/*`. A GitHub login would be the `io.github.*` namespace, which is the wrong namespace for this name. Do not invent a GitHub login to fill a placeholder.

`https://ipa.raymati.com/mcp` has to be reachable on the public internet before publish. The document this host already serves is [/server.json](/server.json):

```json
{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "com.raymati/ipa",
  "description": "Score a Koine Greek attempt. Tools score, heard_as, recognize, and create_upload.",
  "version": "0.2.0",
  "remotes": [
    {"type": "streamable-http", "url": "https://ipa.raymati.com/mcp"}
  ]
}
```

`remotes[0].type` is `streamable-http`. There is no legacy SSE endpoint.

### DNS proof

The TXT record goes on the apex of `raymati.com`. A selector such as `_mcp-auth` or `_mcp-registry` is never read.

1. Ed25519 needs OpenSSL 3: `openssl genpkey -algorithm ED25519`.
2. Publish this TXT record on the apex (the public key is the one from that keypair; do not commit the private key):

```text
v=MCPv1; k=ed25519; p=<PUBLIC_KEY>
```

3. `mcp-publisher login dns --domain raymati.com --private-key HEX_KEY`
4. `mcp-publisher publish` with the path to `server.json`.

`--registry` is a flag on `login`, not on `publish`. Leave it unset to use `https://registry.modelcontextprotocol.io`.

HTTP alternative: host the same record at `https://raymati.com/.well-known/mcp-registry-auth` and run `mcp-publisher login http`.

On rotation, remove the stale `MCPv1` TXT records. Anthropic's connector directory does not use this DNS proof. That proof is only for the official MCP registry.


## Claude directory

- Guide: <https://claude.com/docs/connectors/building/submission>
- Portal: <https://claude.ai/directory/manage> (a paid plan; a Team or Enterprise owner)

The connector is a remote MCP server. Tools need titles and read-only or destructive hints, plus docs, a privacy page, and an icon. Anthropic's directory does not require the MCP registry DNS proof. That proof is only for `com.raymati/ipa` on the official registry.

## ChatGPT

Custom MCP is Plugins, plus, Add custom MCP server, URL `https://ipa.raymati.com/mcp`, auth none. Source: <https://help.openai.com/en/articles/12584461-creating-custom-mcp-apps-in-chatgpt>.

App review is the OpenAI plugin submission, not a self-serve listing. Review checks the HTTP `Content-Security-Policy` and the widget `_meta.ui.csp`.

## Smithery

<https://smithery.ai/new> takes the public HTTPS URL, or:

```bash
smithery mcp publish "https://ipa.raymati.com/mcp" -n @org/ipa
```

If a scan fails, an optional static card can live at `/.well-known/mcp/server-card.json`. This host does not publish that extra card. Docs: <https://smithery.ai/docs/build/publish>.

## Glama

On the connectors page: Add MCP Server, then Connector, then the HTTPS Streamable HTTP URL. Claim the listing with a TXT record at `_glama-claim.` or with `/.well-known/glama.json`. FAQ: <https://glama.ai/mcp/faq>.

## PulseMCP

The primary path is the GitHub topic `mcp-server`, which they crawl weekly, not only a form. <https://www.pulsemcp.com>.

## mcp.so

The listing form is on <https://mcp.so>.

## APIs.guru

They aggregate. They do not host. After deploy, submit `https://ipa.raymati.com/openapi.json` at <https://apis.guru/add-api>. Rules: <https://github.com/APIs-guru/openapi-directory/blob/main/CONTRIBUTING.md>.
