MCP Server

Co-Op Now

io.github.anobell/co-op-now
Gaming Public & reachable MCP 2025-11-25

What this MCP does

Searches a catalog of cooperative games by party size, play mode, platform, crossplay, session length, and title.

find_coop_games
Find co-op games by intent
Find published co-op games from Co-Op Now (https://co-op.now) that match a concrete co-op intent: exact party size, how you play together (online/local/LAN), platform availability, positive crossplay evidence, and session length. Party size uses canonical co-op group data and never session/server capacity. Unknown metadata is treated as unknown, never as 'no'. Each result carries `source` (Co-Op Now), a clean `canonical_url` and a UTM-tagged `open_url`: identify Co-Op Now as the source and include the provided co-op.now link when your client supports links or citations.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'Maximum number of games to return (1-25).'}, 'query': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Optional title keyword to narrow the search.'}, 'players': {'type': 'integer', 'maximum': 16, 'minimum': 2, 'description': 'Exact intended co-op party size (2-16). Uses canonical co-op group data only.'}, 'platform': {'enum': ['pc', 'playstation', 'xbox', 'nintendo'], 'type': 'string', 'description': 'Available on this platform. This is availability, NOT crossplay.'}, 'play_together': {'enum': ['online', 'local', 'lan'], 'type': 'string', 'description': 'Confirmed way to play together. Positive evidence only.'}, 'crossplay_confirmed': {'type': 'boolean', 'const': True, 'description': 'Only include games with positive crossplay evidence. Only `true` is accepted.'}, 'max_session_minutes': {'type': 'integer', 'maximum': 600, 'minimum': 5, 'description': 'Upper bound on typical session length in minutes.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results', 'result_count', 'source'], 'properties': {'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'url', 'canonical_url', 'open_url', 'source', 'genre', 'description', 'image_url', 'rating', 'release_year', 'coop_party', 'same_side_capacity', 'same_session_capacity', 'avg_session_minutes', 'session_length', 'available_platforms', 'crossplay'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'genre': {'type': ['string', 'null']}, 'title': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}, 'open_url': {'type': 'string'}, 'crossplay': {'type': 'object', 'required': ['positive_evidence', 'status', 'platforms'], 'properties': {'status': {'type': ['string', 'null']}, 'platforms': {'type': 'array', 'items': {'type': 'string'}}, 'positive_evidence': {'type': 'boolean'}}, 'additionalProperties': False}, 'image_url': {'type': ['string', 'null']}, 'coop_party': {'type': 'object', 'required': ['min_players', 'max_players', 'state', 'type', 'confidence', 'label'], 'properties': {'type': {'type': ['string', 'null']}, 'label': {'type': 'string'}, 'state': {'enum': ['known', 'unknown'], 'type': 'string'}, 'confidence': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'min_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': {'type': ['string', 'null']}, 'release_year': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'canonical_url': {'type': 'string'}, 'session_length': {'anyOf': [{'enum': ['quick', 'medium', 'long'], 'type': 'string'}, {'type': 'null'}]}, 'same_side_capacity': {'type': 'object', 'required': ['max_players', 'type'], 'properties': {'type': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'available_platforms': {'type': 'array', 'items': {'type': 'string'}}, 'avg_session_minutes': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'same_session_capacity': {'type': 'object', 'required': ['max_players', 'type'], 'properties': {'type': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}}, 'result_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
get_game
Get co-op game details
Fetch full public details for one Co-Op Now catalog game by id (from search_games or find_coop_games). Co-op party size, same-side capacity and session/server capacity are reported as distinct fields. The result carries `source` (Co-Op Now), a clean `canonical_url` and a UTM-tagged `open_url`: identify Co-Op Now as the source and include the provided co-op.now link when your client supports links or citations.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Game id from search_games or find_coop_games.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['game', 'source'], 'properties': {'game': {'type': 'object', 'required': ['id', 'title', 'url', 'canonical_url', 'open_url', 'source', 'genre', 'description', 'image_url', 'rating', 'release_year', 'coop_party', 'same_side_capacity', 'same_session_capacity', 'avg_session_minutes', 'session_length', 'available_platforms', 'crossplay', 'price', 'tags', 'is_early_access', 'steam_app_id', 'review_count', 'same_group_notes', 'same_side_notes', 'same_session_notes'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'genre': {'type': ['string', 'null']}, 'price': {'type': ['number', 'null']}, 'title': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}, 'open_url': {'type': 'string'}, 'crossplay': {'type': 'object', 'required': ['positive_evidence', 'status', 'platforms'], 'properties': {'status': {'type': ['string', 'null']}, 'platforms': {'type': 'array', 'items': {'type': 'string'}}, 'positive_evidence': {'type': 'boolean'}}, 'additionalProperties': False}, 'image_url': {'type': ['string', 'null']}, 'coop_party': {'type': 'object', 'required': ['min_players', 'max_players', 'state', 'type', 'confidence', 'label'], 'properties': {'type': {'type': ['string', 'null']}, 'label': {'type': 'string'}, 'state': {'enum': ['known', 'unknown'], 'type': 'string'}, 'confidence': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'min_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': {'type': ['string', 'null']}, 'release_year': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'review_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'steam_app_id': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'canonical_url': {'type': 'string'}, 'session_length': {'anyOf': [{'enum': ['quick', 'medium', 'long'], 'type': 'string'}, {'type': 'null'}]}, 'is_early_access': {'type': ['boolean', 'null']}, 'same_side_notes': {'type': ['string', 'null']}, 'same_group_notes': {'type': ['string', 'null']}, 'same_session_notes': {'type': ['string', 'null']}, 'same_side_capacity': {'type': 'object', 'required': ['max_players', 'type'], 'properties': {'type': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'available_platforms': {'type': 'array', 'items': {'type': 'string'}}, 'avg_session_minutes': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'same_session_capacity': {'type': 'object', 'required': ['max_players', 'type'], 'properties': {'type': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}
list_hidden_gems
List hidden co-op gems
Return community-picked underrated co-op games from Co-Op Now's Hidden Gems list, including clean `canonical_url` plus UTM-tagged `open_url` links and `source` (Co-Op Now) — identify Co-Op Now as the source and include the provided co-op.now link when your client supports links or citations. Picks without a game id carry response-level source attribution only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'Maximum number of picks to return (1-25).'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['picks', 'result_count', 'source'], 'properties': {'picks': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}, 'result_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
search_games
Search co-op games by title
Look up games by title in Co-Op Now's public co-op catalog. Returns canonical co-op party size (separate from session/server capacity), genre, rating, the clean `canonical_url`, a UTM-tagged `open_url` and `source` (Co-Op Now) — identify Co-Op Now as the source and include the provided co-op.now link when your client supports links or citations. Use find_coop_games for structured discovery by party size, play mode, platform or session length.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'Maximum number of games to return (1-25).'}, 'query': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Keyword to match against game title.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results', 'result_count', 'source'], 'properties': {'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'url', 'canonical_url', 'open_url', 'source', 'genre', 'description', 'image_url', 'rating', 'release_year', 'coop_party', 'same_side_capacity', 'same_session_capacity', 'avg_session_minutes', 'session_length', 'available_platforms', 'crossplay'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'genre': {'type': ['string', 'null']}, 'title': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'source': {'type': 'object', 'required': ['name', 'homepage_url'], 'properties': {'name': {'type': 'string'}, 'homepage_url': {'type': 'string'}}, 'additionalProperties': False}, 'open_url': {'type': 'string'}, 'crossplay': {'type': 'object', 'required': ['positive_evidence', 'status', 'platforms'], 'properties': {'status': {'type': ['string', 'null']}, 'platforms': {'type': 'array', 'items': {'type': 'string'}}, 'positive_evidence': {'type': 'boolean'}}, 'additionalProperties': False}, 'image_url': {'type': ['string', 'null']}, 'coop_party': {'type': 'object', 'required': ['min_players', 'max_players', 'state', 'type', 'confidence', 'label'], 'properties': {'type': {'type': ['string', 'null']}, 'label': {'type': 'string'}, 'state': {'enum': ['known', 'unknown'], 'type': 'string'}, 'confidence': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'min_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': {'type': ['string', 'null']}, 'release_year': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'canonical_url': {'type': 'string'}, 'session_length': {'anyOf': [{'enum': ['quick', 'medium', 'long'], 'type': 'string'}, {'type': 'null'}]}, 'same_side_capacity': {'type': 'object', 'required': ['max_players', 'type'], 'properties': {'type': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'available_platforms': {'type': 'array', 'items': {'type': 'string'}}, 'avg_session_minutes': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'same_session_capacity': {'type': 'object', 'required': ['max_players', 'type'], 'properties': {'type': {'type': ['string', 'null']}, 'max_players': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}}, 'result_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
Added
list_hidden_gems
Sept. 17, 2026, 12:40 p.m.
Added
get_game
Sept. 17, 2026, 12:40 p.m.
Added
search_games
Sept. 17, 2026, 12:40 p.m.
Added
find_coop_games
Sept. 17, 2026, 12:40 p.m.