Infinite Backlog MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IB_COOKIES | No | JSON array of cookies for a logged-in session. Do not ask a human to fill this by hand. | |
| IB_HEADLESS | No | Default headless mode for tools that do not pass headless (true / false) | |
| GOOGLE_API_KEY | No | Google key (alternative for autonomous tool) | |
| OPENAI_API_KEY | No | OpenAI key for run_browser_use_task (one of the four keys for the autonomous tool) | |
| IB_ALLOW_EVAL_JS | No | Enable the evaluate_js debug tool (true / false, default false) | false |
| ANTHROPIC_API_KEY | No | Anthropic key (alternative for autonomous tool) | |
| IB_VIEWPORT_WIDTH | No | Playwright viewport width (default 1280, clamped) | 1280 |
| IB_VIEWPORT_HEIGHT | No | Playwright viewport height (default 800, clamped) | 800 |
| BROWSER_USE_API_KEY | No | browser-use Cloud key (alternative for autonomous tool) | |
| IB_CHROMIUM_NO_SANDBOX | No | Pass --no-sandbox to Chromium (default false; containers only) | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| open_siteB | Navigate to a page on infinitebacklog.net. Pass headless=false for a visible window so you can log in. |
| current_urlB | Return current URL and title. |
| close_browserB | Close the shared Playwright browser used by deterministic tools. |
| get_page_textC | Extract visible text from the current page. |
| get_page_htmlC | Get HTML of an element (default body). |
| get_linksC | Extract links (text + href) from the current page. |
| screenshotB | Take a screenshot of the current page. Saved under the OS temp infinitebacklog-mcp directory. |
| search_gamesB | Search the Infinite Backlog games catalog and return page text. Fill #game-search via the Vue native value setter. Live filter is /games?q=. /games?search= does not filter. Never type into #platforms-search. |
| clickB | Click by CSS selector or text=... Blocked for destructive IB actions owned by dedicated tools. |
| fillB | Fill an input field. Refuses password and credential selectors. |
| evaluate_jsB | Run JavaScript in the page and return JSON result. Disabled unless IB_ALLOW_EVAL_JS=true. |
| set_cookiesA | Inject cookies for authenticated sessions. JSON array: [{"name":"...","value":"...","domain":".infinitebacklog.net","path":"/"}, ...] Only infinitebacklog.net cookies are accepted. |
| list_related_contentA | List every RELATED GAMES & CONTENT tab on a game page: editions, DLC, packs, add-ons, remakes, bundles, and any other live section. Expands each tab before scraping. |
| list_collection_content_menusB | List extras widgets on a collection edit form: Add DLC dropdown, owned DLC, addon/pack checkboxes, GAME EDITION text, and other extras menus. Wait for UPDATE GAME. Requires login. Does not change the form. |
| add_game_contentA | Add owned extras on the parent collection edit form. |
| list_collection_game_optionsB | Read-only dump of copies, extra-platform plus button, progress widgets, ratings, and reviews for a collection game. Does not save. Requires login. |
| add_game_platform_copyA | Add another GAME INFORMATION copy via button.extra-platform on the collection edit header. Skips if that platform copy already exists. Never fills Acquisition Info. Never DELETE GAME. Pass submit=false to fill the form without saving. Platform is taken from the caller, or inferred when the extra-copy select has exactly one real option. Digital/Physical is changed only when digital is passed. |
| set_game_progressA | Set per-copy progress on the collection edit form: status, completion, 0-100 bar, progress notes. collection_id required when multiple copies exist. Changes only provided fields. clear_fields JSON list can empty notes/progress/status. One UPDATE GAME. Does not touch edition, DLC, Digital Service, or Acquisition Info. Never DELETE GAME. |
| set_game_acquisitionA | Set or clear ACQUISITION INFO on a collection copy. Only provided fields change. clear_fields is a JSON list (source, amount, date, notes, acquisition, digital_service, additional_cost). One UPDATE GAME. collection_id required when multiple copies exist. Never DELETE GAME. Never UNLOCK CUSTOM TAGS. |
| delete_game_copyB | Delete a saved collection copy via DELETE GAME. collection_id always required. confirm=true required. Does not click DELETE DRAFT or DELETE GAME FOR unsaved extra platforms. Last remaining copy removes the game from the collection. |
| set_game_ratingA | Set or clear IB ratings on the collection game page (per IGDB game, not per copy). Scores are 1-10. Empty sub-fields stay unchanged. clear=true removes the rating. Requires login. |
| add_game_reviewA | Add or update a review at /games/{slug}/add-review. Body required. Publish needs 800+ characters; use publish=false for Save draft. If a review already exists, opens the existing editor. Never clicks DELETE. Requires login. |
| delete_game_reviewA | Delete a review. Drafts only unless published=true AND you named that review. confirm=true required. Never DELETE GAME. |
| list_play_recordsB | Read-only dump of Play Records categories and Add new category options. Does not save. Requires login. Play Records tab is hidden when status is No Status. |
| set_play_record_categoryB | Add or edit a Play Records category on this game (not the user profile). Types: keyValue, checkbox, progress, table. If the UI would write a global category library, returns profile_scope unless confirm_new=true and you named that category in chat. |
| set_play_recordC | Add or update a Play Records row in a category on this game. action is add or update. keyValue uses name+value; checkbox uses name; progress uses name+value as progress_earned. |
| remove_play_recordA | Remove a Play Records row, or an entire category if row_index is empty. confirm=true required for category delete. Never DELETE GAME. |
| run_browser_use_taskA | Run an autonomous browser-use agent for complex multi-step tasks on Infinite Backlog. Prefer the deterministic tools for simple reads/clicks. The agent is scoped to infinitebacklog.net and will refuse tasks that contain a non-IB URL. Requires: pip install browser-use + an LLM API key in the environment (OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, or BROWSER_USE_API_KEY). Examples:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
The IB-specific tools (set_game_progress, add_game_content, add_game_platform_copy, set_game_acquisition) have very detailed descriptions that draw boundaries, but they still overlap conceptually (content vs. copy vs. acquisition on the same edit form). Additionally, the generic browser primitives (click, fill, search_games) overlap with the higher-level deterministic tools and run_browser_use_task explicitly, and the three read-only collection listers (list_related_content, list_collection_content_menus, list_collection_game_options) are easy to confuse.
The Infinite Backlog domain tools consistently use a verb_noun snake_case pattern (set_game_progress, add_game_content, delete_game_review, list_play_records). However, the browser-automation primitives deviate: bare verbs (click, fill), bare nouns (current_url, screenshot), and mixed forms (open_site, get_page_text) coexist, breaking the otherwise predictable convention.
28 tools is on the heavy side for a single-site automation server, and the generic Playwright primitives (click, fill, evaluate_js, get_page_html, get_links) add surface that partly duplicates the deterministic tools. The count is defensible given the broad domain (progress, play records, ratings, reviews, copies, acquisition, content, and browser automation), but it sits at the borderline-heavy end.
Coverage is broad: play records and categories, progress, ratings, reviews, acquisition info, platform copies, DLC/packs/editions, and reads for all of these, plus a browser fallback. Minor gaps exist such as adding a brand-new game to the collection from scratch and no dedicated edition/DLC-orchestration beyond add_game_content, but core CRUD across the collection lifecycle is largely present.