streamable-httpupdated 4mo ago
Powered by 72,000+ US lakes and 293,000+ stocking events across 12 states.
What can you do with outdooriq mcp?
OutdoorIQ MCP β Outdoor Recreation Intelligence
Powered by 72,000+ US lakes and 293,000+ stocking events across 12 states.
OutdoorIQ MCP is a paid MCP server that exposes lake conditions, fish-stocking records, fishing-favorability scoring, and live weather to AI agents. It is built on the CastIQ dataset (the same data that powers fishing-seo.pages.dev and the CastIQ catalog APIs).
If you're building a trip-planning assistant, a fishing app, a travel concierge, or an outdoor-brand agent that needs to recommend lakes, time visits to recent stocking events, or pull a fishing report on demand, this is the data layer you wire up.
For consumer-facing AI products, OutdoorIQ replaces a ten-source ETL with one authenticated MCP endpoint β and bills predictably so you don't get a surprise S3 invoice the first weekend traffic spikes.
Pricing
| Tier | Price | Limits |
|---|---|---|
| Free | $0 | outdooriq-dev-key-001, 50 calls/day |
| Pro | $14/mo | Unlimited |
| Pay-as-you-go | $0.01/call | No monthly minimum |
Listing & checkout: https://mcpize.com/outdooriq-mcp
Install in Claude
Live URL: https://mcp.castiq.net/mcp (Railway fallback: https://web-production-9b8950.up.railway.app/mcp)
The fastest path uses mcp-remote as a stdioβHTTP bridge:
claude mcp add outdooriq-mcp -- npx -y mcp-remote \
https://mcp.castiq.net/mcp \
--header "X-API-Key:outdooriq-dev-key-001"
Or configure manually:
{
"mcpServers": {
"outdooriq-mcp": {
"url": "https://mcp.castiq.net/mcp",
"headers": { "X-API-Key": "outdooriq-dev-key-001" }
}
}
}
Anthropic MCP Registry entry: io.github.bch1212/outdooriq-mcp β
listed at https://registry.modelcontextprotocol.io.
Example agent prompt:
"Find top 5 trout lakes near Chicago for this weekend."
The agent calls get_nearby_lakes (lat/lng of Chicago, radius 200mi),
filters for species: trout via get_top_lakes, then pulls
get_fishing_report_summary for the top match.
Tool Reference
| Tool | Args | Returns |
|---|---|---|
search_lakes |
name?, state?, county?, min_acres?, max_acres?, limit? |
List of matching lakes |
get_lake_details |
lake_id |
Coords, acreage, depth, species, facilities |
get_stocking_data |
lake_id?, species?, year?, limit? |
Recent stocking events |
get_fishing_score |
lake_id |
0-100 score with bucket breakdown |
get_nearby_lakes |
lat, lng, radius_miles?, min_score?, limit? |
Lakes near GPS, sorted by score |
get_weather_for_lake |
lake_id |
Current + 7-day forecast (Open-Meteo) |
get_top_lakes |
state?, species?, limit? |
Highest-scoring lakes |
get_stocking_schedule |
state?, species?, month?, limit? |
Most-recent matching events as a planning prior |
search_species |
state?, season? |
Actively-stocked species |
get_fishing_report_summary |
lake_id |
Natural-language report |
Architecture
client (Claude / agent)
β HTTP POST /mcp (JSON-RPC 2.0)
βΌ
FastAPI app (server.py)
β X-API-Key auth + per-day rate limiter
βΌ
Tool registry (10 tools)
β
βΌ
db.connection.py βββββββ
β Postgres mode β β CastIQ Postgres (72k lakes, 293k stockings)
β SQLite fallbackβ β bundled seed (100+ lakes, ~150 stockings)
βΌ
tools.* (lakes, stocking, scoring, weather, reports)
β
βΌ
Open-Meteo (no key)
Postgres vs SQLite mode
The server picks a backend at startup:
- If
DATABASE_URLis set, it triesasyncpg.create_pool. On success β logs[OutdoorIQ] Running in Postgres mode. - If the pool fails (timeout, bad creds, DB down) or
DATABASE_URLis unset, the server seeds an in-memory SQLite DB with 100+ real lakes and logs[OutdoorIQ] Running in SQLite fallback mode.
The server always starts, regardless of Postgres availability.
| Capability | Postgres mode | SQLite fallback |
|---|---|---|
| Lake catalog | 72,669 (12 states) | ~106 (WI, MN, IL, IA, MO) |
| Stocking events | 293,821 historical | ~150 templated, recency-tuned |
| Species coverage | All states/species in CastIQ | Curated subset (walleye, bass, musky, trout, crappie, perch, pike, panfish, salmon, lake_trout, sauger, white_bass, sturgeon, catfish, bluegill, smallmouth_bass) |
| Year-over-year analysis | Yes β multi-year stockings | Limited β events are anchored relative to "now" |
| Stocking-schedule tool | Real historical patterns | Approximated from seed |
| Weather, scoring, reports | Identical | Identical |
Local development
git clone <this repo>
cd mcp-outdoors
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Run with SQLite fallback (no DATABASE_URL needed)
python -m run
# OR run against the CastIQ Postgres
export DATABASE_URL=postgresql://vikinetic:vikinetic_dev@localhost:5444/vikinetic
python -m run
Then:
curl -s http://localhost:8080/health
curl -s -X POST http://localhost:8080/mcp \
-H "X-API-Key: outdooriq-dev-key-001" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Tests
pytest -v
The test suite covers both the SQLite fallback path and the Postgres dispatch
path (via a mocked asyncpg pool), plus auth, rate limits, all 10 tools,
JSON-RPC initialize / list / call, and the scoring algorithm's bucket math.
Deploy to Railway
A deploy.sh script is included at the repo root. Run it on your Mac (the
Cowork sandbox can't reach Railway/Stripe/Cloudflare APIs):
./deploy.sh
It expects RAILWAY_API_TOKEN (or RAILWAY_TOKEN exported as RAILWAY_API_TOKEN),
points the project at nixpacks.toml, and sets the DATABASE_URL env var if
you've also provisioned the CastIQ Postgres on Railway.
Railway gotcha (already handled): Railway exec's
startCommandwithout a shell, so$PORTdoesn't expand. We usepython -m runand readPORTfromos.environinsiderun.py.
MCPize listing copy
OutdoorIQ MCP β the data layer for outdoor-rec AI agents. 72,000+ US lakes, 293,000+ fish-stocking events, and live weather behind one authenticated endpoint. Search lakes by name, state, or acreage; pull stocking history filtered by species and month; compute a 0-100 fishing-favorability score that bakes in recency, species diversity, lake size, and current conditions. One JSON-RPC call replaces a multi-source ETL.
Built for fishing apps, trip-planning assistants, travel concierges, and outdoor-brand agents. $14/mo Pro for unlimited use, or pay $0.01 per call. Free dev tier (50 calls/day) lets you ship a prototype before opening your wallet. Install with
claude mcp add outdooriq-mcp --url https://mcp-outdoors.up.railway.app/mcp.
License
MIT. See LICENSE.
Install
Add outdooriq mcp to your client. Pick the one you use.
claude mcp add --transport http outdooriq-mcp https://mcp.castiq.net/mcpcodex mcp add outdooriq-mcp --url https://mcp.castiq.net/mcp{
"mcpServers": {
"outdooriq-mcp": {
"url": "https://mcp.castiq.net/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"outdooriq-mcp": {
"type": "http",
"url": "https://mcp.castiq.net/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"outdooriq-mcp": {
"url": "https://mcp.castiq.net/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"outdooriq-mcp": {
"serverUrl": "https://mcp.castiq.net/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
10 tools
outdooriq mcp exposes 10 tools to a connected agent.
- search_lakes
- `name?, state?, county?, min_acres?, max_acres?, limit?`
- get_lake_details
- `lake_id`
- get_stocking_data
- `lake_id?, species?, year?, limit?`
- get_fishing_score
- `lake_id`
- get_nearby_lakes
- `lat, lng, radius_miles?, min_score?, limit?`
- get_weather_for_lake
- `lake_id`
- get_top_lakes
- `state?, species?, limit?`
- get_stocking_schedule
- `state?, species?, month?, limit?`
- search_species
- `state?, season?`
- get_fishing_report_summary
- `lake_id`
Score
64 / 100
Good
- Documentation25/25
- Maintenance13/25
- Trust6/20
- Capability8/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 114 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 10 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 0.1.0Latest | May 9, 2026 |