Cassini Mission Plan
FreeNot checkedEnables querying of the Cassini-Huygens mission dataset with tools for listing, searching, counting, aggregating, and browsing activities.
About
Enables querying of the Cassini-Huygens mission dataset with tools for listing, searching, counting, aggregating, and browsing activities.
README
A read-only Model Context Protocol server over the Cassini-Huygens mission dataset (~62k activity rows). Built as an AI workshop demo: clean, readable TypeScript that runs live in Claude Desktop.
Live endpoint: https://cassini-mission-plan.paganio.workers.dev
🩺 A plain GET / returns a JSON health/info page. The MCP protocol itself is POST-only JSON-RPC, so any other request gets a 405.
# Health check
curl https://cassini-mission-plan.paganio.workers.dev
# List the tools (JSON-RPC over POST)
curl -X POST https://cassini-mission-plan.paganio.workers.dev \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
What it does
Exposes 7 MCP tools so an LLM client can query the Cassini master_plan table:
| Tool | What it answers |
|---|---|
list_activities |
Filtered, paginated rows (date range, team, target) |
get_activity |
Single row by id |
search_activities |
FTS5 full-text search over title + description |
count_activities |
Row count matching the same filters as list |
aggregate_activities |
Group-by counts (team / target / spass_type) |
timeline |
Bucketed counts over a date range (year or month) — zero-filled |
list_distinct |
Distinct values of team / target / spass_type |
Architecture
- Runtime: Cloudflare Workers (TypeScript)
- Data: Cloudflare D1 (SQLite) —
master_plantable + FTS5 virtual table - Transport: hand-rolled MCP-over-HTTP (JSON-RPC 2.0 over plain HTTP POST)
- Validation: zod schemas per tool; errors surface as JSON-RPC error objects
See docs/ARCHITECTURE.md for the full design.
Project setup
npm install
Run tests
npm test # Jest — all specs against in-memory SQLite
The deploy spec (spec/deploy-and-initialize.spec.ts) needs a live URL:
DEPLOY_URL=https://cassini-mission-plan.paganio.workers.dev npm test
Deploy (one-time setup)
Create the D1 database:
npx wrangler d1 create cassiniCopy the
database_idintowrangler.toml.Import the data (generates
data/cassini.d1.sqlfromdata/cassini.db):npm run import # tsx scripts/import.ts → writes data/cassini.d1.sql npx wrangler d1 execute cassini --remote --file=data/cassini.d1.sqlDeploy:
npm run deploy
Local dev
npm run dev # wrangler dev (uses local D1)
🔎 Query the data directly
The local D1 starts empty — seed it once from the generated SQL:
npx wrangler d1 execute cassini --local --file=data/cassini.d1.sql
Then run SQL against the master_plan table (drop --local for --remote to hit the deployed DB):
# Top science teams by activity count
npx wrangler d1 execute cassini --local \
--command="SELECT team, COUNT(*) AS activities FROM master_plan GROUP BY team ORDER BY activities DESC LIMIT 5;"
# Full-text search via the FTS5 table
npx wrangler d1 execute cassini --local \
--command="SELECT id, title FROM master_plan_fts JOIN master_plan USING(rowid) WHERE master_plan_fts MATCH 'titan flyby' LIMIT 5;"
# Activities targeting Enceladus, earliest first
npx wrangler d1 execute cassini --local \
--command="SELECT start_iso, title FROM master_plan WHERE target='Enceladus' ORDER BY start_iso LIMIT 5;"
Docs
| File | What's in it |
|---|---|
docs/PROJECT.md |
Problem, audience, goals, scope |
docs/ARCHITECTURE.md |
Components, data model, key decisions |
docs/SPEC.md |
Tool API reference + functional/non-functional requirements |
docs/STORIES.md |
User stories (source for the spec suite) |
docs/PLAN.md |
Build task checklist (all complete) |
docs/MEMORY.md |
Decision log maintained with Claude Code |
Installing Cassini Mission Plan
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/opagani/cassini-workshopFAQ
Is Cassini Mission Plan MCP free?
Yes, Cassini Mission Plan MCP is free — one-click install via Unyly at no cost.
Does Cassini Mission Plan need an API key?
No, Cassini Mission Plan runs without API keys or environment variables.
Is Cassini Mission Plan hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install Cassini Mission Plan in Claude Desktop, Claude Code or Cursor?
Open Cassini Mission Plan on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Cassini Mission Plan with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
