Skip to main content

Model Context Protocol

NILmetrics for your AI assistant

Connect Claude, ChatGPT or Cursor to NILmetrics with one URL and an API key. Your assistant can look up players, read the market and work your watchlist and boards, with the same access your key has in the API.

The endpoint

NILmetrics hosts the MCP server for you, so there is nothing to install. It speaks the Streamable HTTP transport and authenticates every request with a NILmetrics API key sent as a Bearer token. A request without a valid key gets a 401.

Server URL
https://nilmetrics.com/api/mcp
Header
Authorization: Bearer YOUR_API_KEY

Get an API key

API keys are issued by our team for each customer, with the scopes your work needs. The MCP server uses the same keys as the NILmetrics API. Already a customer? Ask for a key from Developer access in your account settings. New to NILmetrics? Request access or contact us.

Treat the key like a password. Each tool call counts as one API request against your key's rate limit and request quota.

Set up your client

Replace YOUR_API_KEY with your key in each example.

Claude Code

Run this once in a terminal. The server is then available in every Claude Code session.

claude mcp add --transport http nilmetrics https://nilmetrics.com/api/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

Claude Desktop

Add the server to your Claude Desktop config (Settings, Developer, Edit Config), then restart Claude Desktop. The mcp-remote bridge sends your key as a header; it needs Node.js installed.

claude_desktop_config.json
{
  "mcpServers": {
    "nilmetrics": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://nilmetrics.com/api/mcp",
        "--header",
        "Authorization:${NILMETRICS_AUTH}"
      ],
      "env": {
        "NILMETRICS_AUTH": "Bearer YOUR_API_KEY"
      }
    }
  }
}

The Custom Connector screen in Claude Desktop and claude.ai signs in with OAuth, which NILmetrics does not offer yet, so use the config file above.

Cursor

Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project).

mcp.json
{
  "mcpServers": {
    "nilmetrics": {
      "url": "https://nilmetrics.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

ChatGPT (OpenAI API)

Give a model the NILmetrics tools through the OpenAI Responses API by passing the endpoint as a remote MCP server.

curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5",
    "input": "Who are the top-rated womens basketball players right now?",
    "tools": [{
      "type": "mcp",
      "server_label": "nilmetrics",
      "server_url": "https://nilmetrics.com/api/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" },
      "require_approval": "never"
    }]
  }'

Custom connectors inside the ChatGPT app sign in with OAuth, which NILmetrics does not offer yet. Use the API as shown.

Check your key

This lists the tools without spending a tool call.

curl https://nilmetrics.com/api/mcp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Tools

21 tools, each backed by an API endpoint and checked against your key the same way. Tools marked "your account" read or change your own watchlist, notes and boards, so they need a key linked to your user account.

ToolWhat it doesScope
nilmetrics_list_playersList scored players (cursor-paginated). Filters: gender, tier, conference_id, position, search, min_score, limit, cursor.read:players
nilmetrics_get_playerGet one player's score, pillars, tier, and projection.read:players
nilmetrics_player_historyA player's daily score history (up to 365 days).read:players
nilmetrics_player_explanationThe model's plain-language explanation + top factors for a player.read:players
nilmetrics_player_dealsA player's confirmed deals (brand / collective base / competing offers).read:players
nilmetrics_list_conferencesList conferences with average score + team count.read:players
nilmetrics_list_teamsList teams (filter by gender, conference_id).read:players
nilmetrics_market_moversBiggest 14-day score movers.read:market
nilmetrics_market_signalsDecision signals + market pulse + NIL index.read:market
nilmetrics_market_topTop-rated athletes.read:market
nilmetrics_get_watchlistThe caller's saved (starred) players.read:watchlistyour account
nilmetrics_add_to_watchlistSave a player to the caller's watchlist.write:watchlistyour account
nilmetrics_remove_from_watchlistRemove a player from the caller's watchlist.write:watchlistyour account
nilmetrics_list_boardsThe caller's boards (deal lists).read:boardsyour account
nilmetrics_get_boardA board's detail + its players.read:boardsyour account
nilmetrics_list_rosterThe caller's signed deals (active roster).read:boardsyour account
nilmetrics_get_noteThe caller's private note for a player.read:playersyour account
nilmetrics_set_noteSet/clear the caller's private note for a player (empty body clears).write:notesyour account
nilmetrics_create_boardCreate a board (deal list). Pass idempotency_key to make a retry safe (a repeat replays instead of duplicating).write:boardsyour account
nilmetrics_add_board_playerAdd a player to a board.write:boardsyour account
nilmetrics_sign_board_playerSign a board player into the active roster at a deal amount. keep_on_board keeps the board row (default true); idempotency_key makes a retry safe.write:boardsyour account

Scopes used: read:boards, read:market, read:players, read:watchlist, write:boards, write:notes, write:watchlist. A call your key is not scoped for returns a forbidden error naming the missing scope, and nothing runs.

Building directly on the API?

The API reference documents every endpoint behind these tools, with request and response shapes.