{"name":"io.github.chase-roohms/legendkeeper-mcp","slug":"chase-roohms-legendkeeper-mcp","title":"LegendKeeper","description":"Read and build LegendKeeper worlds from AI assistants: wiki pages, maps, timelines, facts and tags.","url":"https://mcp.market/server/chase-roohms-legendkeeper-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":33,"stars":3,"forks":0,"downloads_week":65,"last_push_at":"2026-10-24T09:34:13.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"mixed","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/chase-roohms/legendkeeper-mcp","website":"https://github.com/chase-roohms/legendkeeper-mcp","version":"0.1.2","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"legendkeeper-mcp","version":"0.1.2","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"LegendKeeper project API key (Project Settings → Developers → API Keys). The project owner needs a paid plan.","isRequired":true,"format":"string","isSecret":true,"name":"LEGENDKEEPER_API_KEY"},{"description":"Set to true to expose only reading tools.","format":"boolean","default":"false","name":"LEGENDKEEPER_READ_ONLY"}]},{"registryType":"oci","identifier":"ghcr.io/chase-roohms/legendkeeper-mcp:0.1.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"LegendKeeper project API key (Project Settings → Developers → API Keys). The project owner needs a paid plan.","isRequired":true,"format":"string","isSecret":true,"name":"LEGENDKEEPER_API_KEY"},{"description":"Set to true to expose only reading tools.","format":"boolean","default":"false","name":"LEGENDKEEPER_READ_ONLY"}]}],"tools":[{"name":"api_request","description":"Call any LegendKeeper REST v3 endpoint of this project directly (advanced: boards, calendars, block-level edits, properties, invites, restores…). Returns the raw JSON response. Writes are disabled in read-only mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browse_tree","description":"Show the resource tree (the world's wiki hierarchy) as an indented outline with ids, icons, tags and child counts. Start here to see how a world is organized.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_document","description":"Add a document (tab) to a resource: a page, a map, a timeline or a board. A resource holds at most 5.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_from_template","description":"Create a resource from a template (copies its documents, properties, icon and tags).","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_map_feature","description":"Add a pin, label, region, path or folder to a map document. Coordinates are [lat, lng] in the map's frame (read_document on the map shows its bounds), or image pixels with pixel_coordinates=true.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_resource","description":"Create a resource (wiki article, location, character…), optionally with page content in Markdown. Reuse existing tags (list_tags) and give it an icon. Returns the new id and its documents.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_resources","description":"Create up to 100 resources in one atomic request: ideal for scaffolding a region, a cast of NPCs or a whole hierarchy. Give items a `key` and nest later items under them with `parent_key`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_timeline_event","description":"Add an event to a timeline document. Link it to the page that tells the full story.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_timeline_lane","description":"Add a lane (row) to a timeline, placed after the existing lanes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_document","description":"Delete one document (tab) of a resource. It can be restored with api_request (POST /resources/{id}/docs/{docId}/restore).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_map_feature","description":"Delete a feature (pin, label, region, path or folder) from a map.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_resource","description":"Move a resource (with its documents, and children if cascade=true) to the trash. Restore it with restore_resource using the id returned here.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_timeline_event","description":"Delete an event from a timeline.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_resource","description":"Get one resource's details: path, tags, aliases, icon, banner, documents, sidebar properties (facts) and children. Use read_document to read a document's content.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_assets","description":"List the world's asset library (uploaded images, maps, folders) with ids and URLs. Image URLs can be used in page images, banners, map images and events.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_calendars","description":"List the calendars timelines can use (built-in ones like gregorian, harptos, exandria, plus custom calendars): id, name, months and eras.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_members","description":"List the members of the world and their roles (emails are only visible to ADMIN keys).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_projects","description":"List the LegendKeeper projects (worlds) this server is configured for, with the default project and whether writes are enabled. Each API key belongs to exactly one project.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tags","description":"List every tag used in the world with how many resources carry it. Check this before tagging so you reuse existing tags with the exact same spelling.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_templates","description":"List resource templates (id, name, parent). Use create_from_template to instantiate one.","write_action":false,"price_micros":0,"input_schema":null},{"name":"move_resource","description":"Move a resource (and its children) to another parent and/or position among its siblings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_document","description":"Read a document of a resource. Pages come back as Markdown (with mentions as [Name](lk://resources/id) links); maps list their pins/regions/paths with coordinates; timelines list lanes and events; boards list their text. Without `document`, the first page is used, else the first map, timeline or board.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_resource","description":"Restore a deleted resource from the trash (its parent must not be deleted).","write_action":false,"price_micros":0,"input_schema":null},{"name":"search","description":"Full-text search across resource names, aliases and document content (best match first). Returns ids, paths, tags and the matching passage.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_facts","description":"Set at-a-glance facts (e.g. Race, Age, Ruler, Population) as key-value rows in the page's infobox or the resource's sidebar. Creates the infobox / property group when it does not exist yet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_document","description":"Rename a document, hide/show it, toggle full width, set a timeline's calendar or a map's image.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_map_feature","description":"Change a map feature: rename, move, reshape, relink, restyle or hide it.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_resource","description":"Change a resource's name, tags, aliases, icon, visibility, lock or banner. Content is edited with write_page; facts with set_facts; position in the tree with move_resource.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_timeline_event","description":"Change a timeline event's name, dates, lane, link or style.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_image","description":"Upload an image to the world's asset library and return its asset id and URL. Use the URL in a page image (![alt](url)), a resource banner (update_resource banner_url) or as a map image (create_document / update_document map_image_asset_id).","write_action":true,"price_micros":0,"input_schema":null},{"name":"write_page","description":"Write Markdown to a page document. [[Name]] and [text](lk://resources/<id>) become mentions; callouts, secrets, tables, task lists and images are supported. Writes are atomic; pass expected_version (from read_document) so edits made in the app after you read the page are never overwritten.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-10-29T06:00:10.541Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-29T06:00:10.464Z","components":{"code":{"score":25,"max":25,"notes":["28 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 5 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"legendkeeper-mcp","version":"0.1.2","found":true,"weeklyDownloads":65,"license":"MIT","dependencyCount":6,"publishedAt":"2026-10-17T04:05:41.095698Z","repositoryUrl":"https://github.com/chase-roohms/legendkeeper-mcp"}],"repo":{"found":true,"owner":"chase-roohms","repo":"legendkeeper-mcp","archived":false,"pushedAt":"2026-10-24T09:34:13Z","stars":3,"forks":0,"openIssues":3,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/131704514?v=4","ownerCreatedAt":"2023-04-24T17:57:23Z","license":"MIT"},"icon":{"url":"https://raw.githubusercontent.com/chase-roohms/legendkeeper-mcp/main/docs/icon.png","source":"registry","width":256,"height":256},"presence":{"stars":3,"forks":0,"downloadsWeek":65,"license":"MIT","lastPushAt":"2026-10-24T09:34:13.000Z","score":33}}}},"grade_history":[],"reviews":[]}