SAIR MCP Server
The SAIR MCP Server exposes the SAIR Competition Public API as 48 tools for MCP clients, enabling end-to-end interaction with competitions, practice playground, personal libraries, and community sharing.
Account
Verify your API key and inspect granted scopes (
get_me)
Competitions
Browse competitions and read their submission specs
Check eligibility before submitting
Submit competition entries (cheatsheet, model-reference, solver-participation, IGP24-polynomial)
View leaderboards and your own standing
Read, download, and manage submissions
Track IGP24 label discovery progress in bulk
Playground
Browse available models and problem sets for practice
Submit, list, cancel, and manage practice runs
Retrieve per-problem results for a run
Stream live verdict events for solver-participation runs
Check usage and credit balance
Cheatsheets
Create, list, read, update, and delete personal cheatsheets for use in runs and competitions
Solver Templates
Create, list, read, update, and delete personal Lean 4 solver templates
Custom Lean Problems
Create, list, read, and delete private immutable Lean statement pairs for use in solver-participation runs
Contributor Network
Browse and search shared cheatsheets, solver templates, and model references
Publish and withdraw your own resources to/from the community
Favorite and unfavorite items
Comment on items and delete your own comments
Explore lineage graphs for individual items or across all visible items
View benchmark results for published items, overall or per-model
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SAIR MCP ServerList all active competitions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sair-mcp
A local MCP (Model Context Protocol) server that exposes the SAIR Competition Public API as tools for an MCP client (Claude Code, Claude Desktop, or any other MCP-compatible client).
It covers the full documented API surface: account introspection, competitions (browsing, eligibility, leaderboards, submissions, IGP24 label progress), Playground (models, problem sets, runs, results, live event streaming, usage), your private cheatsheet and Lean solver-template libraries, custom Lean problems, and the Contributor Network (browsing, publishing, favoriting, commenting, lineage graphs, benchmarks).
Installation
Requires Python 3.10+.
git clone <this-repo>
cd SAIRmcp
pip install -e .Related MCP server: codabench-mcp
Getting a SAIR API key
Sign in to SAIR and open Account settings -> API keys.
Create a key and select the scopes you need. At minimum, for the examples below:
competition.readandcompetition.write. Addplayground.read/playground.writefor Playground tools,contributor-network.read/contributor-network.writefor Contributor Network tools.Copy the key immediately -- it is shown only once. Keys look like
sair_a1b2c3d4_zR9....
Configuration
Set these environment variables before starting the server:
Variable | Required | Default | Purpose |
| Yes | - | Your personal SAIR API key. The server refuses to start without it. |
| No |
| Override for testing against a different environment. |
Running it standalone
python -m sair_mcpThis starts the server on stdio and blocks, waiting for an MCP client to connect. There is no output on success; it's meant to be launched by an MCP client, not run interactively.
Registering with Claude Code and other mcp clients
Add to your project's .mcp.json (or user-level MCP config)
{
"mcpServers": {
"sair": {
"command": "python",
"args": ["-m", "sair_mcp"],
"env": {
"SAIR_API_KEY": "sair_a1b2c3d4_zR9..."
}
}
}
}Or via the CLI, substituting the same absolute path:
claude mcp add sair -- python3 -m sair_mcp(then set SAIR_API_KEY in your shell environment before launching Claude
Code, or add it to the env block above).
Alternative: pyproject.toml also declares a sair-mcp console-script
entry point, so once installed you can skip -m sair_mcp entirely and
point command straight at that script's absolute path instead -- again,
resolve it in the same command as the install so it can't drift to a
different environment's sair-mcp:
pip install -e . && which sair-mcpNo args needed when using this form.
If you use a dedicated virtual environment for this project (recommended
for isolation from other Python projects), the same rule applies: use
<path-to-venv>/bin/python (or <path-to-venv>/bin/sair-mcp) as command,
not a bare python.
Registering with Claude Desktop
Add the same shape to claude_desktop_config.json under mcpServers,
using the same absolute-interpreter-path command as above -- Desktop's
subprocess environment is even less likely than a terminal's to have your
Python environment on PATH.
Usage example
A typical end-to-end flow, as an MCP client would call it:
get_me-- confirm the key is valid and see its scopes.list_competitions-- find a competition ID.get_competition("modular-arithmetic-challenge")-- readsubmissionSpecto learn the requiredpayloadshape.get_my_participation("modular-arithmetic-challenge")-- checkcanSubmitbefore attempting anything.submit_competition_entry("modular-arithmetic-challenge", payload={"modelName": "you/your-model", "commitHash": "0123...(40 hex chars)"}).get_my_submission("modular-arithmetic-challenge")-- confirm the active submission.
Tool reference
All tools return the API's unwrapped data object as a dict (or None for
204 responses, or a plain string for the two text-returning tools). On
error, the tool call fails with a SairApiError-derived message in the
form [<http status> <error code>] <message>; consult
SAIR's Errors documentation
for the full code table.
Account (1 tool)
Tool | Scope | Purpose |
| none | Confirm the API key and see its owner + granted scopes. |
Competitions (10 tools)
Tool | Scope | Purpose |
|
| List competitions visible through the API. |
|
| Get one competition's detail and |
|
| Check |
|
| List published leaderboard rows. |
|
| Get the caller's own leaderboard entry. |
|
| Create or replace the caller's submission. |
|
| Read the caller's current submission (or history, for IGP24). |
|
| Read one submission by ID. |
|
| Download the stored text body of a submission. |
|
| Bulk aggregate IGP24 discovery progress by label. |
Playground (10 tools)
Tool | Scope | Purpose |
|
| List model IDs accepted in runs for a competition. |
|
| List available practice problem sets. |
|
| Get every problem in one problem set. |
|
| Create a practice run. |
|
| List the caller's runs for a competition. |
|
| Get one run's params, summary, and timing. |
|
| Cancel a pending/running run. |
|
| List per-cell/per-problem result rows for a run. |
|
| Collect live verdict events for a solver-participation run (blocks up to a timeout). |
|
| Get the caller's practice credit/usage counters. |
Cheatsheets (5 tools)
Tool | Scope | Purpose |
|
| List the caller's cheatsheets. |
|
| Get one cheatsheet including its content. |
|
| Create a cheatsheet. |
|
| Update a cheatsheet's title/content. |
|
| Delete a cheatsheet. |
Solver templates (5 tools)
Tool | Scope | Purpose |
|
| List the caller's Lean solver templates. |
|
| Get one solver template including its source. |
|
| Create a solver template. |
|
| Update a solver template's title/source. |
|
| Delete a solver template. |
Custom Lean problems (4 tools)
Tool | Scope | Purpose |
|
| List the caller's private Lean statement pairs. |
|
| Get one custom problem. |
|
| Create an immutable custom Lean problem. |
|
| Delete a custom problem. |
Contributor Network (13 tools)
Tool | Scope | Purpose |
|
| Browse shared cheatsheets/solver templates/model references. |
|
| Get one item's full payload. |
|
| Publish a saved resource, submission body, inline text, or model reference. |
|
| Withdraw (unpublish) an item you authored. |
|
| Favorite an item. |
|
| Unfavorite an item. |
|
| List comments on an item. |
|
| Post a comment. |
|
| Delete a comment. |
|
| Get the lineage subgraph rooted at one item. |
|
| Get the lineage graph across all visible items. |
|
| List platform-run benchmark summaries. |
|
| Get the per-model benchmark breakdown for one item. |
Total: 48 tools.
Development
pip install -e ".[dev]"
pytest --cov=sair_mcp --cov-report=term-missingAll tests run against a mocked HTTP layer (respx) -- no test requires or
uses a real SAIR_API_KEY or makes a real network call.
License
MIT -- see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA lightweight, local-first MCP server for executing HTTP requests and managing API collections and environments without cloud dependencies. It enables testing APIs, handling authentication, and importing OpenAPI specifications directly within MCP-compatible workflows.Last updated421064MIT
- AlicenseBqualityDmaintenanceMCP server for Codabench REST API that enables AI agents to drive a full participant ML-benchmark workflow: discover competitions, download data, submit, poll, and read leaderboards.Last updated16MIT
- AlicenseBqualityDmaintenanceA full-featured MCP server for the Kaggle API — competitions, datasets, kernels, models, benchmarks, and discussions.Last updated513MIT
- Flicense-qualityDmaintenanceLocal MCP server that exposes fixed tools for GPT, Claude, and Gemini while routing to any OpenAI-compatible chat completions backend with independent configuration per target.Last updated
Related MCP Connectors
MCP server for interacting with the Supabase platform
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
MCP server exposing the Backtest360 engine API as tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/osick/SAIRmcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server