sam-parsons/whitney-museum-mcp
If you are the rightful owner of whitney-museum-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This is a minimal Model Context Protocol (MCP) server for the Whitney Museum API, providing read-only access to various resources through a structured protocol.
MCP Server for Whitney Museum API
Minimal Model Context Protocol (MCP) server that exposes a few read-only tools backed by the Whitney Museum public API.
References
- API landing and docs: Whitney API, Whitney API docs
- Open data (CSV) repository: Open Access GitHub
Use with Cursor and Claude (MCP)
This server supports both stdio and HTTP (Server‑Sent Events) transports. For Cursor and Claude Desktop, the simplest setup is HTTP via url.
Quick start (local HTTP)
- Run the server locally over HTTP:
python main.py --http --port 8000
- Verify it’s up:
open http://localhost:8000/health
- Add to your MCP config as an
urlserver.
** location is not guaranteed **
- Cursor (macOS):
~/.cursor/mcp.json - Claude Desktop (macOS):
~/Library/Application Support/Claude/mcp.json
Example entry:
{
"mcpServers": {
"whitney-api": {
"url": "http://localhost:8000/mcp"
}
}
}
Restart Cursor/Claude and you should see the whitney-api server with the tools listed below.
Remote (Railway or any HTTPS host)
If you deploy this server (Dockerfile included) and get a public URL, point your MCP client at https://<your-domain>/mcp:
{
"mcpServers": {
"whitney-api": {
"url": "https://whitney-museum-mcp-production.up.railway.app/mcp"
}
}
}
Optional: stdio transport
You can also run via stdio if you prefer a command‑based server:
python main.py
MCP config example:
{
"mcpServers": {
"whitney-api-stdio": {
"command": "python",
"args": ["main.py"]
}
}
}
Tools
Registered MCP tools (current set):
artists_list— List artists from the public APIartist_get(artist_id)— Get a single artist by IDartworks_list— List artworks from the public APIartwork_get(artwork_id)— Get a single artwork by IDexhibitions_list— List exhibitions from the public APIexhibition_get(exhibition_id)— Get a single exhibition by IDevents_list— List events from the public APIevent_get(event_id)— Get a single event by IDguides_list— List guides from the public APIguide_get(guide_id)— Get a single guide by IDpages_list— List pages from the public APIpage_get(page_id)— Get a single page by ID
Install
Requirements: Python 3.12+
uv venv
source .venv/bin/activate
uv pip install -e .
Alternatively:
python -m venv .venv
source .venv/bin/activate
pip install -e .
Run
Docker (HTTP transport)
Use the published image or build locally. The container serves HTTP on port 8000.
Using Docker Hub image:
docker pull samparsons269/whitney-museum-mcp:latest
docker run --rm -p 8000:8000 samparsons269/whitney-museum-mcp:latest
Build locally:
docker build -t whitney-museum-mcp .
docker run --rm -p 8000:8000 whitney-museum-mcp
Verify:
curl -s http://localhost:8000/health
open http://localhost:8000/docs
Local Python
HTTP (recommended for Cursor/Claude via url):
python main.py --http --port 8000
Stdio (for command/args config):
python main.py
Deploy on Railway
This repo is Docker-ready. Create a new Railway service from this repo or Docker image. Ensure port 8000 is exposed, and Railway will set PORT; the image already reads it.
Once deployed, configure Cursor/Claude with your service URL:
{
"mcpServers": {
"whitney-api": {
"url": "https://<your-railway-subdomain>.up.railway.app/mcp"
}
}
}
Development
Run tests:
pytest
License
MIT License. See for details.