Skip to main content
Glama
Pryno-ai

Pryno MCP

Official
by Pryno-ai
README.md
# Pryno MCP

Pryno MCP is a remote [Model Context Protocol](https://modelcontextprotocol.io) server. It lets any MCP client search the Pryno directory of public MCP servers and score a website for AI-agent readiness.

The directory is filled by a separate private crawler. This server only reads that database. It does not crawl, and it does not store CRM credentials.

- Remote endpoint: `https://mcp.pryno.ai/mcp`
- Source: [github.com/Pryno-ai/pryno-mcp](https://github.com/Pryno-ai/pryno-mcp)
- Website: [pryno.ai](https://www.pryno.ai)

## Tools

| Tool | What it does |
| --- | --- |
| `search_mcp_servers` | Search by text, category, transport, language, official servers, or remote servers. |
| `get_mcp_server` | Full record for one slug, including packages and stdio install hints. |
| `list_categories` | Categories and how many servers are in each. |
| `directory_stats` | Total servers, servers added in the last 7 days, and the last crawl time. |
| `run_readiness_check` | Score a public URL from 0 to 100. |

Every tool is read-only. Search and lookup results include `readiness_score` and `last_checked_at` when the crawler has stored them.

Example: search for Postgres, then open one result.

```json
{ "query": "postgres", "limit": 5 }
```

```json
{ "slug": "example-postgres" }
```

```json
{ "url": "https://www.pryno.ai" }
```

The readiness check fetches public files only (`llms.txt`, `llms-full.txt`, `robots.txt`, OpenAPI, API docs, MCP discovery, and schema.org JSON-LD). It returns pass or fail with a short summary of our own. It does not return excerpts from the target site. Private, loopback, and link-local addresses are rejected.

Resources:

- `pryno://directory/categories`
- `pryno://server/{slug}`

Prompt: `find_mcp_server`.

## Connect

The remote URL for every client is `https://mcp.pryno.ai/mcp`. No API key is required.

### Claude

Add a custom connector with the remote MCP URL `https://mcp.pryno.ai/mcp`.

### ChatGPT

In developer mode, add a remote MCP server with the URL `https://mcp.pryno.ai/mcp`.

### Cursor

```json
{
  "mcpServers": {
    "pryno": {
      "url": "https://mcp.pryno.ai/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "pryno": {
      "type": "http",
      "url": "https://mcp.pryno.ai/mcp"
    }
  }
}
```

### Local stdio

The database URL belongs in the environment that launches the process. Do not commit it.

```json
{
  "mcpServers": {
    "pryno": {
      "command": "npx",
      "args": ["-y", "pryno-mcp"],
      "env": {
        "DATABASE_URL": "postgres://directory_reader@localhost:5432/pryno"
      }
    }
  }
}
```

You can also point the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) at a local HTTP server:

```bash
npm run build
npm start
npx @modelcontextprotocol/inspector
```

Connect the inspector to `http://localhost:3000/mcp`.

## Self-hosting

The server listens on `PORT` and exposes:

- `GET /` a short description
- `GET /health` database ping and schema status
- `POST /mcp` the Streamable HTTP endpoint
- `GET /mcp/server-card` the MCP server card
- `GET /.well-known/ai-catalog.json` a catalog entry that points at the card

```bash
docker build -t pryno-mcp .
docker run --rm -p 3000:3000 --env-file .env pryno-mcp
```

On Railway, use the included `Dockerfile` and `railway.json`. Keep the project private. Set variables in Railway, not in git.

This process expects the crawler's schema and a `directory_reader` role with `SELECT` only. It does not run migrations. Until those tables exist, `/health` still succeeds when `SELECT 1` works, and the directory tools explain that the schema is not ready. `run_readiness_check` does not need the database.

`readiness_score` and `last_checked_at` are columns the crawler stores on `servers`. If they are missing, the schema is reported as incomplete.

## Environment

Copy `.env.example` to `.env`. Never commit `.env`.

| Variable | Required | Purpose |
| --- | --- | --- |
| `DATABASE_URL` | For directory tools | Postgres URL for the `directory_reader` role. |
| `PORT` | No | HTTP port. Defaults to 3000. Railway sets this. |
| `PUBLIC_URL` | No | Public origin used in the server card. Defaults to `https://mcp.pryno.ai`. |
| `RATE_LIMIT_PER_MIN` | No | Per-IP limit for `/mcp`. Defaults to 60. Readiness checks use a tighter limit. |
| `READINESS_CHECK_URL` | No | When set, `run_readiness_check` POSTs `{ "url" }` to this https endpoint instead of scoring locally. |

## Development

```bash
npm ci
npm test
npm run typecheck
npm run lint
```

Tests cover tool schemas, the search query builder, the SSRF guard, and readiness scoring. They use a mocked database and do not call the network.

TDQS

A3.8/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a distinct target: directory browsing (list_categories), querying (search_mcp_servers), single lookup (get_mcp_server), aggregate metrics (directory_stats), and an external scoring function (run_readiness_check). The only mild overlap is between list_categories and directory_stats, both of which surface counts, and between the 'readiness score' returned by lookup tools versus the standalone check tool. Descriptions make the boundary clear enough that misselection is unlikely.

Naming Consistency4/5

Four of five names follow a verb_noun or verb_object pattern (list_categories, search_mcp_servers, get_mcp_server, run_readiness_check) with consistent snake_case. directory_stats breaks the pattern by being noun-only with no verb, a minor deviation. Overall readable and predictable.

Tool Count5/5

Five tools is a tight, well-scoped surface for a read-only directory server: browse, search, lookup, aggregate stats, and one scoring utility. No tool appears redundant or padded, and nothing feels conspicuously absent at the count level.

Completeness4/5

The read-only lifecycle of a directory is well covered: discovery via search, detail via get, taxonomy via list_categories, and health via directory_stats. Minor gaps exist — there's no explicit way to enumerate servers within a category (you must fall back to search) and no compare/batch lookup, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues