Koskamo

Catch of a Lifetime MCP

An MCP server for the Catch of a Lifetime platform that allows AI assistants to plan outdoor outings using live weather and water conditions, check metro launch status, compare with other apps, and provide tools for hosts to draft and promote outings.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Catch of a Lifetime MCP logo, by Catch of a LifetimeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Catch of a Lifetime
MCP endpoint (Streamable HTTP)
https://catchofalifetime.com/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

8 of 8 have a description · 8 of 8 declare behavior hints · 6 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to catchofalifetime.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Plan outdoor outings with live weather and water conditions
  • Check live waitlist progress for metro launches
  • Draft and promote outings as a host
  • Compare Catch of a Lifetime with other social apps

Source and maintenance

Vendor evidenceRegistry 0.2.0

Protocol and capabilities

Server
catch-of-a-lifetime 0.2.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Catch of a Lifetime is an activity-first social platform for outdoor enthusiasts: tribes built around activities, real-time campfire chat, events, an adventure map, and opt-in one-to-one matching called Sparks. It is in private beta and launches in 2027, opening metro by metro (Knoxville, Tri-Cities, Chattanooga, Asheville first). It is free for founding members who join from the waitlist. Main site: https://catchofalifetime.com · Comparisons and guides: https://catchofalifetime.net Use plan_outdoor_outing when someone wants to get outside somewhere specific. For people leading or hosting an outing, use conditions_check (go/no-go), draft_outing (a filled-in outing they post in one tap), outing_promo_kit (posts and reminders) and move_from_meetup (moving a group). Use get_waitlist_link only when they want to join, and never submit a signup on their behalf.

Tools

8 advertised

plan_outdoor_outing — Plan an Outdoor Outing
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Plans a day outside in a US launch metro: National Weather Service forecast, a conditions read for the specific activity (rain, storms, wind, heat, clouds), sunrise/sunset/full-dark times, moon phase, practical tips, and local context. Good for stargazing, fishing, hiking, birding, bouldering, paddling, hunting, cold-water swimming, disc golf and more.

plan_outdoor_outing input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "metro"
  ],
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 20,
      "description": "\"today\", \"tomorrow\", a weekday, \"this weekend\", or YYYY-MM-DD. Defaults to the coming Saturday. Forecasts reach ~7 days ahead."
    },
    "metro": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "City or launch metro, e.g. \"Knoxville\", \"Johnson City\", \"Denver\". Supported: Knoxville, Tri-Cities, Chattanooga, Asheville, Denver, Salt Lake City, Seattle, Boise, Austin, Dallas–Fort Worth, Jacksonville, Memphis, Nashville, Raleigh–Durham, Richmond, Sacramento, San Antonio, San Francisco, Tampa, Virginia Beach."
    },
    "activity": {
      "type": "string",
      "maxLength": 80,
      "description": "What they want to do, e.g. \"stargazing\", \"fishing\", \"hiking\", \"bird watching\", \"bouldering\", \"kayaking\"."
    }
  }
}
plan_outdoor_outing annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
metro_launch_status — Metro Launch Status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Live Catch of a Lifetime waitlist progress: how many people have joined in a metro versus the number needed to open it there. Omit metro for all tracked metros.

metro_launch_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "metro": {
      "type": "string",
      "maxLength": 80,
      "description": "City or metro, e.g. \"Asheville\". Omit for all."
    }
  }
}
metro_launch_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
compare_apps — Compare Outdoor & Social Apps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Sourced side-by-side comparison of Catch of a Lifetime with another app (Tinder, Bumble, Hinge, Meetup, Strava, AllTrails, Timeleft, 222, Grass, BunchUps), including where the other app is the better choice. Omit competitor to list every comparison.

compare_apps input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "metro": {
      "type": "string",
      "maxLength": 80,
      "description": "Optional metro, for the local version of the comparison page."
    },
    "competitor": {
      "type": "string",
      "maxLength": 60,
      "description": "App name, e.g. \"Meetup\" or \"AllTrails\"."
    }
  }
}
compare_apps annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
get_waitlist_link — Get Waitlist Link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the link to join the Catch of a Lifetime waitlist (free for founding members), optionally crediting a friend's referral code. The person signs up themselves on the page; this tool does not collect email addresses.

get_waitlist_link input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "metro": {
      "type": "string",
      "maxLength": 80,
      "description": "Optional metro, to include its launch progress."
    },
    "referral_code": {
      "type": "string",
      "maxLength": 12,
      "description": "Optional 8-character referral code from a friend who's already on the waitlist."
    }
  }
}
get_waitlist_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
conditions_check — Conditions Check (Go / No-Go)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Should this outing go ahead? Returns GO, CAUTION or NO-GO with reasons, from the National Weather Service forecast and active alerts, live USGS river gauges (flow and 6-hour trend) for paddling, rafting, fishing and swimming, NOAA tide times on the coast, and sun and moon times. Works in launch metros or anywhere in the US with latitude and longitude.

conditions_check input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "activity"
  ],
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 20,
      "description": "\"today\", \"tomorrow\", a weekday, \"this weekend\" or YYYY-MM-DD. Default: the coming Saturday. Forecasts reach about 7 days."
    },
    "metro": {
      "type": "string",
      "maxLength": 80,
      "description": "Launch metro or nearby city, e.g. \"Johnson City\", \"Knoxville\", \"Denver\"."
    },
    "activity": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "e.g. \"kayaking\", \"fly fishing\", \"hike\", \"stargazing\", \"trail run\"."
    },
    "latitude": {
      "type": "number",
      "maximum": 72,
      "minimum": 18,
      "description": "Latitude of the exact spot (trailhead, put-in, lake). Use with longitude for anywhere in the US."
    },
    "longitude": {
      "type": "number",
      "maximum": -60,
      "minimum": -180,
      "description": "Longitude of the exact spot."
    },
    "place_name": {
      "type": "string",
      "maxLength": 120,
      "description": "Optional label for the spot, e.g. \"Watauga River put-in\"."
    }
  }
}
conditions_check annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
draft_outing — Draft an Outing
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

For hosts: turns a plan into a filled-in Catch of a Lifetime outing. Returns a link that opens the app's Plan an outing screen with the name, time, length, meeting spot, group size, notes and weekly repeat already set, plus a conditions check when it's within a week. Nothing is posted until the host taps Post. Times accept "9am", "6:30 pm", "sunrise", "sunset" or "full dark".

draft_outing input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "activity"
  ],
  "properties": {
    "zip": {
      "type": "string",
      "maxLength": 10,
      "description": "5-digit ZIP, so people nearby see it. Omit to use the host's own ZIP."
    },
    "date": {
      "type": "string",
      "maxLength": 20,
      "description": "\"tomorrow\", a weekday, \"this weekend\" or YYYY-MM-DD. Default: the coming Saturday."
    },
    "time": {
      "type": "string",
      "maxLength": 20,
      "description": "\"9am\", \"6:30 pm\", \"18:00\", \"sunrise\", \"sunset\", \"full dark\", \"morning\", \"evening\"."
    },
    "metro": {
      "type": "string",
      "maxLength": 80,
      "description": "Launch metro or nearby city, e.g. \"Johnson City\", \"Knoxville\", \"Denver\"."
    },
    "notes": {
      "type": "string",
      "maxLength": 2000,
      "description": "Pace, what to bring, parking. Omit for sensible defaults."
    },
    "place": {
      "type": "string",
      "maxLength": 200,
      "description": "Meeting spot, e.g. \"Buffalo Mountain Park lower lot\"."
    },
    "price": {
      "type": "string",
      "maxLength": 120,
      "description": "For approved Pro hosts only, e.g. \"$45 per person, pay at the trailhead\"."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "description": "Name for the outing. Omit to get a good default."
    },
    "weekly": {
      "type": "boolean",
      "description": "Repeat every week."
    },
    "activity": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "What it is, e.g. \"sunrise hike\", \"fly fishing\", \"kayak\", \"pickleball open play\", \"cars and coffee\"."
    },
    "latitude": {
      "type": "number",
      "maximum": 72,
      "minimum": 18,
      "description": "Latitude of the exact spot (trailhead, put-in, lake). Use with longitude for anywhere in the US."
    },
    "longitude": {
      "type": "number",
      "maximum": -60,
      "minimum": -180,
      "description": "Longitude of the exact spot."
    },
    "group_size": {
      "type": "integer",
      "maximum": 500,
      "minimum": 2,
      "description": "Max people. Snapped to 4, 6, 10 or no limit."
    },
    "ask_before_join": {
      "type": "boolean",
      "description": "Host approves each person who joins."
    },
    "duration_minutes": {
      "type": "integer",
      "maximum": 1440,
      "minimum": 15,
      "description": "How long. Snapped to 1, 2, 3, 4 hours or all day."
    }
  }
}
draft_outing annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
outing_promo_kit — Outing Promo Kit
Advertised by the server during the last successful anonymous check.
Advertised read-only

For hosts: everything needed to fill an outing. Ready-to-paste text for iMessage and WhatsApp, an Instagram or Facebook caption with hashtags, a Facebook group or Nextdoor post, story text, a day-before reminder, a morning-of message, an after-outing recap, and a 5-slide carousel outline.

outing_promo_kit input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "title",
    "when"
  ],
  "properties": {
    "link": {
      "type": "string",
      "format": "uri",
      "maxLength": 300,
      "description": "The outing's share link (catchofalifetime.com/o/…), once it's posted."
    },
    "vibe": {
      "enum": [
        "friendly",
        "hype",
        "chill"
      ],
      "type": "string"
    },
    "when": {
      "type": "string",
      "maxLength": 80,
      "minLength": 3,
      "description": "Human-readable, e.g. \"Saturday, Nov 8 at 7:00 AM\"."
    },
    "metro": {
      "type": "string",
      "maxLength": 80,
      "description": "For local hashtags."
    },
    "place": {
      "type": "string",
      "maxLength": 200
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "minLength": 3,
      "description": "Outing name."
    },
    "activity": {
      "type": "string",
      "maxLength": 80
    },
    "host_name": {
      "type": "string",
      "maxLength": 60
    },
    "spots_left": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1
    }
  }
}
outing_promo_kit annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
move_from_meetup — Move a Group from Meetup
Advertised by the server during the last successful anonymous check.
Advertised read-only

For organizers leaving Meetup: paste the group's name, its description and its schedule (one event per line) and get a 4-week plan. Includes a ready Tribe description, one-tap weekly outing drafts for each recurring event, and an announcement to post to members. Uses only the text provided; it never accesses Meetup or member data.

move_from_meetup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "group_name",
    "schedule"
  ],
  "properties": {
    "zip": {
      "type": "string",
      "maxLength": 10
    },
    "about": {
      "type": "string",
      "maxLength": 4000,
      "description": "The group's description, pasted from its Meetup page."
    },
    "metro": {
      "type": "string",
      "maxLength": 80
    },
    "members": {
      "type": "integer",
      "maximum": 100000,
      "minimum": 1
    },
    "activity": {
      "type": "string",
      "maxLength": 80,
      "description": "Main activity, if the schedule lines don't say."
    },
    "schedule": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 4,
      "description": "One event per line, e.g. \"Saturdays 8am hike at Warriors Path\\nThursdays 6pm run from Founders Park\"."
    },
    "group_name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 2
    }
  }
}
move_from_meetup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

2 advertised

host_an_outing — Host an outing

Advertised by the server during the last successful anonymous check.

Plan, check conditions for, draft and promote an outing you're leading.

idea
What you want to host, e.g. "sunrise hike Saturday near Johnson City" (required)
plan_a_weekend_outside — Plan a weekend outside

Advertised by the server during the last successful anonymous check.

Plan an outdoor outing for this weekend in your metro.

metro
Your city (required)
activity
What you'd like to do

Resources

1 advertised

about — About Catch of a Lifetime

Advertised by the server during the last successful anonymous check.

What Catch of a Lifetime is, its status and where to learn more.

about URI
catch://about

MIME type: text/plain

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-07: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1368 ms
95th percentile latency
1368 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1368 ms · metadata changed · 8 tool(s), 1 resource(s), 0 resource template(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http catch-of-a-lifetime-mcp https://catchofalifetime.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add catch-of-a-lifetime-mcp --url https://catchofalifetime.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable catch-of-a-lifetime-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "catch-of-a-lifetime-mcp": {
      "url": "https://catchofalifetime.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "catch-of-a-lifetime-mcp": {
      "type": "streamableHttp",
      "url": "https://catchofalifetime.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start catch-of-a-lifetime-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "catch-of-a-lifetime-mcp": {
      "type": "http",
      "url": "https://catchofalifetime.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http catch-of-a-lifetime-mcp https://catchofalifetime.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://catchofalifetime.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "catch-of-a-lifetime-mcp": {
      "serverUrl": "https://catchofalifetime.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Catch of a Lifetime MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Catch of a Lifetime MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing