{"name":"io.github.Argo-RPG-Platform/argo-mcp","slug":"argo-rpg-platform-argo-mcp","title":null,"description":"MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2","url":"https://mcp.market/server/argo-rpg-platform-argo-mcp","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":35,"stars":1,"forks":0,"downloads_week":64,"last_push_at":"2026-09-06T04:03:20.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T05:10:23.819Z","last_ok_at":"2026-11-04T05:10:23.819Z","latency_ms":204},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/Argo-RPG-Platform/MCP","website":"https://app.argo.games/docs/mcp","version":"1.0.3","remotes":[{"type":"streamable-http","url":"https://mcp.argo.games/mcp"}],"packages":[{"registryType":"npm","identifier":"argo-mcp","version":"1.0.3","transport":{"type":"stdio"},"environmentVariables":[{"description":"Argo OAuth2 access token from the consent flow at https://app.argo.games/oauth2/mcp-connect","isRequired":true,"isSecret":true,"name":"OAUTH_TOKEN"},{"description":"Argo OAuth2 refresh token. Enables automatic renewal of the access token when it expires (~1 hour).","isSecret":true,"name":"REFRESH_TOKEN"},{"description":"Override the Argo WebAPI base URL. Defaults to https://api.argo.games.","name":"ARGO_API_BASE"}]}],"tools":[{"name":"accept_friend_request","description":"Accept an incoming friend request from the given user.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"userId":{"type":"string","minLength":1,"description":"Argo user ID of the counterparty."}},"required":["userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add_campaign_to_guild","description":"Add a campaign to a guild. Any active member of the guild can do this; the calling user must be the campaign's GM (enforced server-side).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID."},"campaignId":{"type":"string","minLength":1,"description":"Campaign ID to add to the guild."}},"required":["guildId","campaignId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add_co_gm","description":"Send a user an assistant GM (co-GM) offer for a campaign. This does NOT add them immediately: the target must accept the offer before they become an assistant GM. Owner-only — the calling user must be the campaign's primary GM. Maximum 5 co-GMs per campaign.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"userId":{"type":"string","minLength":1,"description":"Argo user ID of the user to promote to co-GM. Must be an existing user."}},"required":["campaignId","userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add_guild_calendar_event","description":"Add a new event to the guild's shared calendar. Owner/Admin only. startDateTime / endDateTime are ISO-8601 (e.g. 2026-06-12T19:00:00).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID."},"title":{"type":"string","minLength":1,"description":"Event title."},"description":{"type":"string","description":"Optional event description."},"startDateTime":{"type":"string","description":"Event start, ISO-8601 (e.g. 2026-06-12T19:00:00)."},"endDateTime":{"type":"string","description":"Event end, ISO-8601 — optional."}},"required":["guildId","title","startDateTime"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"cancel_friend_request","description":"Cancel a friend request you previously sent.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"userId":{"type":"string","minLength":1,"description":"Argo user ID of the counterparty."}},"required":["userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_archive_mnemons","description":"Create Archive mnemons (archived lore that is no longer current). Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"relatedEntryIds":{"type":"array","items":{"type":"string"}}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_campaign","description":"Create a new Argo campaign. The current user becomes GM and the calling token gains read+write access to the new campaign immediately (no re-consent needed). Requires the campaign.create OAuth scope, granted at consent time.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignName":{"type":"string","minLength":1,"description":"Display name of the campaign."},"description":{"type":"string","minLength":1,"description":"Short description of the campaign's setting, tone, and premise."},"ruleSystem":{"type":"string","minLength":1,"description":"Rule system the campaign uses. E.g. 'Dungeons & Dragons 5e', 'Pathfinder 2e', 'Forbidden Lands'. Free-form; the WebAPI derives the slug from this."},"gameSystemSlug":{"type":"string","description":"Optional explicit slug for the public URL (e.g. 'dnd5e'). If omitted, the server derives one from ruleSystem."}},"required":["campaignName","description","ruleSystem"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_custom_mnemons","description":"Create custom-typed mnemons (any free-form entry that doesn't fit the other types). Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"customType":{"type":"string","description":"Optional descriptive subtype label."}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_journal_mnemons","description":"Create Journal mnemons (log of in-world events). Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"date":{"type":"string"},"sessionNumber":{"type":"integer"},"involvedNpcEntryIds":{"type":"array","items":{"type":"string"}},"involvedLocationEntryIds":{"type":"array","items":{"type":"string"}},"involvedCharacterIds":{"type":"array","items":{"type":"string"}},"outcome":{"type":"string"},"consequenceEntryIds":{"type":"array","items":{"type":"string"}}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_location_mnemons","description":"Create Location mnemons (places — cities, dungeons, taverns). Use create_mnemon_relationship with PARENT_OF to nest larger places under one another after creation. Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"levelId":{"type":"string","description":"Unreal Engine level reference."}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_lore_mnemons","description":"Create Lore mnemons (world background, factions' beliefs, history). Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"relatedEntryIds":{"type":"array","items":{"type":"string"}}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_mnemon_relationship","description":"Create a relationship between two mnemon entries. The label decides everything: its kind (containment or association) and how it reads (one_way or mutual) belong to the word itself — never send a per-edge override. All 14 labels: MEMBER (NPC ∈ Faction, mutual), ALLY (mutual), ENEMY (one-way), RIVAL (one-way), PARENT_OF (Location hierarchy — sourceEntryId is the outer/larger place, e.g. Region → City → District → Tavern), CONTAINS (Location → NPC present there), LOCATED_IN (NPC → Location; inverse of CONTAINS), HAS_SUBQUEST (Quest → subquest Quest), QUEST_RELATED_NPC (Quest → NPC), QUEST_RELATED_LOCATION (Quest → Location), SESSION_ATTENDEE_CHARACTER (SessionSummary → CHARACTER-kind Player), SESSION_ATTENDEE_NPC (SessionSummary → NPC), SESSION_FEATURED_QUEST (SessionSummary → Quest), SESSION_FEATURED_LOCATION (SessionSummary → Location). sourceEntryId is the 'from' side; targetEntryId is the 'to' side — which end is which matters. Call describe_mnemon_types for the full valid (sourceType, label, targetType) matrix. For faction membership prefer memberNpcEntryIds / affiliationEntryIds on the NPC itself; for quest links prefer subQuestEntryIds / relatedNpcEntryIds / relatedLocationEntryIds on the quest. Session-summary links have no array equivalent — the SESSION_* labels are the only way to set them.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"sourceEntryId":{"type":"string","minLength":1},"targetEntryId":{"type":"string","minLength":1},"label":{"type":"string","enum":["MEMBER","ALLY","ENEMY","RIVAL","PARENT_OF","CONTAINS","LOCATED_IN","HAS_SUBQUEST","QUEST_RELATED_NPC","QUEST_RELATED_LOCATION","SESSION_ATTENDEE_CHARACTER","SESSION_ATTENDEE_NPC","SESSION_FEATURED_QUEST","SESSION_FEATURED_LOCATION"]},"color":{"type":"string"},"direction":{"type":"string","description":"Deprecated: leave unset. The label alone decides the edge's shape — its kind and how it reads belong to the word (Mnemon D29/D33), and the server refuses a contradiction."}},"required":["campaignId","sourceEntryId","targetEntryId","label"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_npc_mnemons","description":"Create NPC mnemons (FACTION or INDIVIDUAL). npcType is REQUIRED on each item. Use memberNpcEntryIds (on FACTIONs) and affiliationEntryIds (on INDIVIDUALs) to wire membership; the server projects into MEMBER relationships. Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"npcType":{"type":"string","enum":["FACTION","INDIVIDUAL"],"description":"Required: FACTION (organization) or INDIVIDUAL (person)."},"sheetId":{"type":"string"},"primaryLocationEntryId":{"type":"string","description":"Home location — entryId or exact title."},"memberNpcEntryIds":{"type":"array","items":{"type":"string"},"description":"FACTION only: members of this faction (NPC entryIds or titles)."},"affiliationEntryIds":{"type":"array","items":{"type":"string"},"description":"INDIVIDUAL only: factions this person belongs to."},"relationshipIds":{"type":"array","items":{"type":"string"}}},"required":["title","markdown","npcType"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_player_mnemons","description":"Create Player mnemons (party root, character notes, party notes). For playerKind=CHARACTER, supply parentEntryId (the PARTY mnemon), partyId (CampaignParty.id), and characterId (SessionCharacter id) or the entry will be auto-detached. Players with campaign.write may call this for a party they belong to; GMs may call for any party.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"playerKind":{"type":"string","enum":["PARTY","CHARACTER","NOTES"]},"partyId":{"type":"string","description":"CampaignParty id (NOT a mnemon entryId)."},"parentEntryId":{"type":"string","description":"For playerKind=CHARACTER: entryId of the parent PARTY-kind PlayerMnemon."},"characterId":{"type":"string","description":"SessionCharacter id (required for playerKind=CHARACTER)."}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_quest_mnemons","description":"Create Quest mnemons. questStatus is one of active|completed|failed. Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"questStatus":{"type":"string","description":"active | completed | failed."},"issuerNpcEntryId":{"type":"string"},"issuerText":{"type":"string"},"repeatable":{"type":"boolean"},"expiresAt":{"type":"string","description":"ISO-8601 instant."},"subQuestEntryIds":{"type":"array","items":{"type":"string"}},"relatedNpcEntryIds":{"type":"array","items":{"type":"string"}},"relatedLocationEntryIds":{"type":"array","items":{"type":"string"}},"steps":{"type":"array","items":{"type":"object","properties":{"stepId":{"type":"string","description":"Optional. Server generates a fresh UUID when blank. Provide an existing stepId to reuse linkedStepIds."},"title":{"type":"string","description":"Short label for the step, e.g. 'Talk to the innkeeper'."},"description":{"type":"string"},"status":{"type":"string","enum":["Hidden","Available","Active","Completed","Failed","TurnedIn","Abandoned","Expired","OnHold"],"description":"Defaults to 'Available' when omitted. Unknown values are coerced server-side."},"targetNpcEntryIds":{"type":"array","items":{"type":"string"},"description":"NPCs involved in this step (entryIds or titles)."},"targetLocationEntryIds":{"type":"array","items":{"type":"string"},"description":"Locations involved in this step."},"notes":{"type":"array","items":{"type":"string"},"description":"Free-text bullet notes for the step."}},"required":["title"],"additionalProperties":false},"description":"Ordered list of quest steps. Omit to leave empty."},"rewards":{"type":"array","items":{"type":"object","properties":{"rewardType":{"type":"string","description":"Bucket: Gold | Item | XP | Reputation | etc."},"label":{"type":"string","description":"Display label (e.g. '100 gp', 'Ancient map')."},"amount":{"type":"integer","description":"Numeric amount for stack-like rewards."},"itemId":{"type":"string","description":"Optional reference to an item entry."},"notes":{"type":"string"},"linkedStepIds":{"type":"array","items":{"type":"string"},"description":"stepIds and/or subquest entry ids whose completion unlocks this reward."}},"additionalProperties":false},"description":"Rewards shown when the quest completes."}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_session","description":"Schedule a campaign session. Provide an ISO-8601 startAt; endAt is optional. Useful for laying out planned arcs or recurring play nights.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"title":{"type":"string","minLength":1,"description":"Session title (e.g. 'Session 12: The Dragon's Lair')."},"description":{"type":"string","description":"Optional session description / GM notes."},"startAt":{"type":"string","minLength":1,"description":"Session start time as an ISO-8601 instant (e.g. '2026-06-01T19:00:00Z')."},"endAt":{"type":"string","description":"Session end time as an ISO-8601 instant."},"invitedUserIds":{"type":"array","items":{"type":"string"},"description":"User IDs to invite (must be active campaign members)."}},"required":["campaignId","title","startAt"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create_session_summary_mnemons","description":"Create SessionSummary mnemons (structured summaries of game sessions). Players may not call this — GM/co-GM only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Title of the new entry."},"markdown":{"type":"string","minLength":1,"description":"Body content as Markdown. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first."},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"date":{"type":"string"},"sessionNumber":{"type":"integer"},"suggestedTitle":{"type":"string","description":"Short evocative title for the session, like a TV episode title."},"oneSentenceSummary":{"type":"string","description":"Single-sentence TL;DR of what happened."},"detailedSummary":{"type":"string","description":"Full narrative summary, 3-5 paragraphs."},"previouslyOn":{"type":"string","description":"Where each player ended — read aloud at the top of the next session."},"partyEndState":{"type":"object","additionalProperties":{"type":"string"},"description":"Character display name -> short end-of-session status line."},"majorEvents":{"type":"array","items":{"type":"string"},"description":"Significant story beats, in chronological order."},"partyDecisions":{"type":"array","items":{"type":"string"},"description":"Meaningful choices that will shape future sessions."},"openThreads":{"type":"array","items":{"type":"string"},"description":"Unresolved threads and cliffhangers as of session end."},"loot":{"type":"array","items":{"type":"string"},"description":"Items, treasure, or rewards acquired."},"npcsMentioned":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name as referenced in the session, e.g. \"Captain Mira\"."},"role":{"type":"string","description":"Role played this session, e.g. \"quest-giver\", \"rescued captive\"."}},"required":["name"],"additionalProperties":false},"description":"NPCs that appeared or were referenced. This is descriptive only — to link one to an existing NPC mnemon, call create_mnemon_relationship with SESSION_ATTENDEE_NPC."},"combats":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"description":"Who fought whom and where, in one sentence."},"outcome":{"type":"string","description":"How it resolved, e.g. \"party victorious, no casualties\"."}},"required":["description"],"additionalProperties":false},"description":"Combat encounters that took place this session."}},"required":["title","markdown"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"delete_mnemon","description":"Permanently delete a mnemon entry and every relationship that touches it. GM-only on the backend. This cannot be undone — confirm with the user before calling. entryId accepts a hex id or an exact title.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"entryId":{"type":"string","minLength":1,"description":"Mnemon entry ID (hex) or exact title."}},"required":["campaignId","entryId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"delete_mnemon_relationship","description":"Delete a relationship by id.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"relationshipId":{"type":"string","minLength":1}},"required":["campaignId","relationshipId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"describe_mnemon_types","description":"Returns a catalog of all mnemon types, their type-specific fields, and the full valid relationship matrix (sourceType → label → targetType). Call this before create_mnemon or create_mnemon_relationship when you are unsure which type or label to use. NPC subtype is strictly FACTION | INDIVIDUAL.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_create_topic","description":"Create a new forum topic (bug report, feature request, or general discussion). Always call forum_search first to check for duplicates. Call forum_list_categories to get the correct categoryId.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Topic title. Keep it concise and descriptive."},"raw":{"type":"string","minLength":1,"description":"Topic body in Markdown."},"categoryId":{"type":"integer","description":"Numeric category ID. Call forum_list_categories first if unsure."}},"required":["title","raw","categoryId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_get_latest_topics","description":"Get the latest active topics across all forum categories.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_get_notifications","description":"Get the current user's forum notifications (replies, mentions, likes).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_get_user_posts","description":"List topics created by the current user on the forum.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_list_categories","description":"List all Discourse forum categories at community.argo.games. Call this first when the user wants to post a bug report or feature request — you need the categoryId to create a topic.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_list_topics","description":"List topics in a specific forum category. Provide categorySlug and/or categoryId — given only one, the other is resolved from the category list automatically. Use forum_list_categories to discover categories.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"categorySlug":{"type":"string","minLength":1,"description":"Category slug (e.g. 'bug-reports'). Provide this and/or categoryId."},"categoryId":{"type":"integer","description":"Numeric category ID. Provide this and/or categorySlug."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_read_topic","description":"Read the full content of a forum topic including all posts and replies. Post bodies are returned as plain text (HTML markup is stripped).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"topicId":{"type":"integer","description":"Numeric Discourse topic ID."}},"required":["topicId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_reply","description":"Reply to an existing forum topic.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"topicId":{"type":"integer","description":"Numeric Discourse topic ID to reply to."},"raw":{"type":"string","minLength":1,"description":"Reply body in Markdown."}},"required":["topicId","raw"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forum_search","description":"Search forum topics and posts. Supports Discourse search syntax: #category-slug to filter by category, @username to filter by author. Always search before creating a bug report or feature request to avoid duplicates.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"type":"string","minLength":1,"description":"Search query. Supports Discourse search syntax (e.g. #category, @username)."}},"required":["q"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_campaign","description":"Retrieve details of an Argo campaign (name, description, rule system, co-GMs).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"The ID of the campaign to retrieve."}},"required":["campaignId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_guild","description":"Retrieve full details of a guild (members, campaigns, calendar metadata).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID to retrieve."}},"required":["guildId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_mnemon","description":"Get the full details of a specific mnemon entry (title, blocks, type properties).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"entryId":{"type":"string","minLength":1,"description":"Mnemon entry ID (hex) or exact title."}},"required":["campaignId","entryId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_session","description":"Get details of a single campaign session.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"sessionId":{"type":"string","minLength":1,"description":"Session ID."}},"required":["campaignId","sessionId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"invite_guild_member","description":"Invite a user to join the guild. Owner/Admin only.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID."},"userId":{"type":"string","minLength":1,"description":"Argo user ID to invite."}},"required":["guildId","userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_campaigns","description":"List all Argo campaigns the current grant token has access to, including the access level (\"read\" or \"read+write\") for each. Call this first when the user has not provided a campaign ID. Each entry includes both `campaignName` and `id` (shown inline as `[id: …]` and also in structuredContent.idMap). Use the `id` verbatim for any subsequent tool call that takes a `campaignId`. In prose to the user, refer to campaigns by `campaignName`; do not print the raw `id` unless asked.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_co_gms","description":"List the assistant GMs (co-GMs) of a campaign.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."}},"required":["campaignId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_friends","description":"List the current user's accepted friends.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_guild_members","description":"List the members of a guild (id, role, status, invitedAt, joinedAt).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID."}},"required":["guildId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_guilds","description":"List the guilds the current user belongs to, with role (Owner/Admin/Member), member count, and campaign count. Requires the guild.read scope. Each entry includes both `name` and `guildId` (shown inline as `[id: …]` and in structuredContent.idMap). Use the `guildId` verbatim for any tool that takes one; refer to guilds by `name` in prose to the user.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_mnemon_relationships","description":"List the relationships of a mnemon entry, split into outgoing edges, incoming edges, and a flat list of linked entries (entryId/title/type/relationshipTypes). Use this to find members of a faction, allies/enemies of an NPC, etc.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"entryId":{"type":"string","minLength":1}},"required":["campaignId","entryId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_mnemons","description":"List mnemon (lore/memory) entries for an Argo campaign. Optional filters: `title` (case-insensitive substring on entry title only) and `type` (e.g. NPC, Location, Quest). To find entries by what they CONTAIN, use search_mnemons instead. Returns up to `limit` entries (default 100); when `hasMore` is true, call again with `offset` = the returned `nextOffset` to fetch the next page. Each entry includes both `title` and `entryId` (shown inline as `[id: …]` and in structuredContent.idMap). Use the `entryId` verbatim for any tool that takes one; refer to entries by `title` in prose to the user.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"ID of the campaign."},"title":{"type":"string","description":"Case-insensitive substring filter on title."},"type":{"type":"string","description":"Mnemon type filter (NPC, Location, Quest, …)."},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum entries to return (default 100)."},"offset":{"type":"integer","minimum":0,"description":"Entries to skip. Pass the nextOffset from the previous call to fetch the next page."}},"required":["campaignId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_received_friend_requests","description":"List incoming friend requests awaiting your response.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_sent_friend_requests","description":"List outgoing friend requests that are still pending.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_sessions","description":"List campaign sessions for a given month (defaults to the current month).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"year":{"type":"integer","description":"Calendar year. Defaults to current year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month (1-12). Defaults to current month."}},"required":["campaignId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"reject_friend_request","description":"Reject an incoming friend request from the given user.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"userId":{"type":"string","minLength":1,"description":"Argo user ID of the counterparty."}},"required":["userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"remove_co_gm","description":"Remove a co-GM from a campaign. Owner-only or self-removal.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"userId":{"type":"string","minLength":1,"description":"User ID of the co-GM to remove."}},"required":["campaignId","userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"remove_guild_member","description":"Remove a member from the guild. Owner/Admin only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID."},"userId":{"type":"string","minLength":1,"description":"User ID of the member to remove."}},"required":["guildId","userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_mnemons","description":"Full-text search across mnemon titles, tags, and body content (case-insensitive substring). Prefer this over list_mnemons when looking for entries by what they contain — e.g. \"what do we know about the Red Oracle?\". Each hit reports which fields matched (title/tags/content) and up to 3 body snippets; a snippet's blockId is the same block id get_mnemon returns, so you can target the matched block directly in update_mnemons_content. Only content visible to the current user is searched. Returns at most `limit` hits (default 20, max 50) plus `hasMore`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"ID of the campaign."},"query":{"type":"string","minLength":2,"description":"Text to find (case-insensitive substring) in mnemon titles, tags, and body content."},"type":{"type":"string","description":"Mnemon type filter (NPC, Location, Quest, …)."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum results (default 20)."}},"required":["campaignId","query"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"send_friend_request","description":"Send a friend request to another Argo user.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"userId":{"type":"string","minLength":1,"description":"Argo user ID of the counterparty."}},"required":["userId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"set_guild_member_role","description":"Change a guild member's role to Owner, Admin, or Member. Owner/Admin only. Note that promoting another user to Owner transfers the guild — confirm with the user first.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guildId":{"type":"string","minLength":1,"description":"Guild ID."},"userId":{"type":"string","minLength":1,"description":"Member to change."},"role":{"type":"string","enum":["Owner","Admin","Member"],"description":"New role."}},"required":["guildId","userId","role"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_archive_mnemons","description":"Update typed/meta fields of Archive mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"relatedEntryIds":{"type":"array","items":{"type":"string"}}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_campaign","description":"Update a campaign's display name and/or description. Both fields optional — only supplied fields are changed; pass an empty string to clear the description. GMs and co-GMs can call this; rule-system swaps remain WebApp-only.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"ID of the campaign to update."},"campaignName":{"type":"string","minLength":1,"maxLength":200,"description":"New display name. Omit to leave unchanged."},"campaignDescription":{"type":"string","maxLength":5000,"description":"New description (setting, tone, premise). Omit to leave unchanged. Pass an empty string to clear the existing description."}},"required":["campaignId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_custom_mnemons","description":"Update typed/meta fields of Custom-typed mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"customType":{"type":"string"}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_journal_mnemons","description":"Update typed/meta fields of Journal mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"date":{"type":"string"},"sessionNumber":{"type":"integer"},"involvedNpcEntryIds":{"type":"array","items":{"type":"string"}},"involvedLocationEntryIds":{"type":"array","items":{"type":"string"}},"involvedCharacterIds":{"type":"array","items":{"type":"string"}},"outcome":{"type":"string"},"consequenceEntryIds":{"type":"array","items":{"type":"string"}}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_location_mnemons","description":"Update typed/meta fields of Location mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"levelId":{"type":"string"}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_lore_mnemons","description":"Update typed/meta fields of Lore mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"relatedEntryIds":{"type":"array","items":{"type":"string"}}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_mnemons_content","description":"Edit the body content of one or more mnemon entries. Each item carries an entryId and an ordered list of ops (append, insertAfter, replace, remove) applied atomically per entry. Op content is authored as Markdown (headings, lists, quotes, code fences, bold/italic, links) — do NOT send HTML. Mentions: @[label](mnemon:<entryId>). Images: ![caption](asset:<assetId>@<campaignId>) — upload the asset first; inline base64 / data: URLs are not accepted. Node addressing: get body-node ids from get_mnemon, then target them in replace/remove/insertAfter. A single op's Markdown may produce several nodes; new nodes get fresh server-generated ids (replace keeps the original id on the first new node). On a bad op (missing blockId, unknown op, etc.) the whole entry's batch is rejected with the failedOpIndex; no partial mutation per entry. See describe_mnemon_types.blockOps for the full vocabulary.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"ops":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string","enum":["append","insertAfter","replace","remove"],"description":"The op to apply."},"blockId":{"type":"string","description":"Required for replace and remove: a body node id from get_mnemon."},"afterBlockId":{"type":"string","description":"Required for insertAfter: the body node id the new content follows."},"markdown":{"type":"string","description":"Markdown content for append / insertAfter / replace. May produce several body nodes. Mentions: @[label](mnemon:<entryId>); images: ![caption](asset:<assetId>@<campaignId>)."}},"required":["op"],"additionalProperties":false,"description":"A single body mutation, keyed by node id. See describe_mnemon_types.blockOps."},"minItems":1,"maxItems":50,"description":"Ordered ops to apply atomically per entry."}},"required":["entryId","ops"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_npc_mnemons","description":"Update typed/meta fields of NPC mnemons (visibility, tags, npcType, faction membership, etc.). Does NOT modify content blocks — use update_mnemons_content for that. Set visibility=PUBLIC on multiple NPCs in a single call by listing them in items[].","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"npcType":{"type":"string","enum":["FACTION","INDIVIDUAL"]},"sheetId":{"type":"string"},"primaryLocationEntryId":{"type":"string"},"memberNpcEntryIds":{"type":"array","items":{"type":"string"}},"affiliationEntryIds":{"type":"array","items":{"type":"string"}},"relationshipIds":{"type":"array","items":{"type":"string"}}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_player_mnemons","description":"Update typed/meta fields of Player mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"playerKind":{"type":"string","enum":["PARTY","CHARACTER","NOTES"]},"partyId":{"type":"string"},"parentEntryId":{"type":"string"},"characterId":{"type":"string"}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_quest_mnemons","description":"Update typed/meta fields of Quest mnemons (status transitions, expiry, related entries).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"questStatus":{"type":"string"},"issuerNpcEntryId":{"type":"string"},"issuerText":{"type":"string"},"repeatable":{"type":"boolean"},"expiresAt":{"type":"string"},"subQuestEntryIds":{"type":"array","items":{"type":"string"}},"relatedNpcEntryIds":{"type":"array","items":{"type":"string"}},"relatedLocationEntryIds":{"type":"array","items":{"type":"string"}},"steps":{"type":"array","items":{"type":"object","properties":{"stepId":{"type":"string","description":"Optional. Server generates a fresh UUID when blank. Provide an existing stepId to reuse linkedStepIds."},"title":{"type":"string","description":"Short label for the step, e.g. 'Talk to the innkeeper'."},"description":{"type":"string"},"status":{"type":"string","enum":["Hidden","Available","Active","Completed","Failed","TurnedIn","Abandoned","Expired","OnHold"],"description":"Defaults to 'Available' when omitted. Unknown values are coerced server-side."},"targetNpcEntryIds":{"type":"array","items":{"type":"string"},"description":"NPCs involved in this step (entryIds or titles)."},"targetLocationEntryIds":{"type":"array","items":{"type":"string"},"description":"Locations involved in this step."},"notes":{"type":"array","items":{"type":"string"},"description":"Free-text bullet notes for the step."}},"required":["title"],"additionalProperties":false},"description":"If present, replaces the entire steps list. Omit to leave steps untouched."},"rewards":{"type":"array","items":{"type":"object","properties":{"rewardType":{"type":"string","description":"Bucket: Gold | Item | XP | Reputation | etc."},"label":{"type":"string","description":"Display label (e.g. '100 gp', 'Ancient map')."},"amount":{"type":"integer","description":"Numeric amount for stack-like rewards."},"itemId":{"type":"string","description":"Optional reference to an item entry."},"notes":{"type":"string"},"linkedStepIds":{"type":"array","items":{"type":"string"},"description":"stepIds and/or subquest entry ids whose completion unlocks this reward."}},"additionalProperties":false},"description":"If present, replaces the entire rewards list."}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_session","description":"Reschedule a campaign session or edit its title/description. All fields optional. Owner-only on the backend.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1,"description":"Campaign ID."},"sessionId":{"type":"string","minLength":1,"description":"Session ID."},"title":{"type":"string"},"description":{"type":"string"},"startAt":{"type":"string","description":"ISO-8601 instant."},"endAt":{"type":"string","description":"ISO-8601 instant."}},"required":["campaignId","sessionId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update_session_summary_mnemons","description":"Update typed/meta fields of SessionSummary mnemons.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaignId":{"type":"string","minLength":1},"items":{"type":"array","items":{"type":"object","properties":{"entryId":{"type":"string","minLength":1,"description":"Mnemon entry id (hex) or exact title."},"title":{"type":"string"},"visibility":{"type":"string","enum":["HIDDEN","INTERNAL","PUBLIC"]},"tags":{"type":"array","items":{"type":"string"}},"date":{"type":"string"},"sessionNumber":{"type":"integer"},"suggestedTitle":{"type":"string","description":"Short evocative title for the session, like a TV episode title."},"oneSentenceSummary":{"type":"string","description":"Single-sentence TL;DR of what happened."},"detailedSummary":{"type":"string","description":"Full narrative summary, 3-5 paragraphs."},"previouslyOn":{"type":"string","description":"Where each player ended — read aloud at the top of the next session."},"partyEndState":{"type":"object","additionalProperties":{"type":"string"},"description":"Character display name -> short end-of-session status line."},"majorEvents":{"type":"array","items":{"type":"string"},"description":"Significant story beats, in chronological order."},"partyDecisions":{"type":"array","items":{"type":"string"},"description":"Meaningful choices that will shape future sessions."},"openThreads":{"type":"array","items":{"type":"string"},"description":"Unresolved threads and cliffhangers as of session end."},"loot":{"type":"array","items":{"type":"string"},"description":"Items, treasure, or rewards acquired."},"npcsMentioned":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name as referenced in the session, e.g. \"Captain Mira\"."},"role":{"type":"string","description":"Role played this session, e.g. \"quest-giver\", \"rescued captive\"."}},"required":["name"],"additionalProperties":false},"description":"NPCs that appeared or were referenced. This is descriptive only — to link one to an existing NPC mnemon, call create_mnemon_relationship with SESSION_ATTENDEE_NPC."},"combats":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"description":"Who fought whom and where, in one sentence."},"outcome":{"type":"string","description":"How it resolved, e.g. \"party victorious, no casualties\"."}},"required":["description"],"additionalProperties":false},"description":"Combat encounters that took place this session."}},"required":["entryId"],"additionalProperties":false},"minItems":1,"maxItems":50}},"required":["campaignId","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-09-27T21:29:31.842Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T21:29:31.802Z","components":{"code":{"score":25,"max":25,"notes":["45 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 389ms"]},"poisoning":{"score":15,"max":15,"notes":["62 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 32 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 22 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://mcp.argo.games/mcp","reachable":true,"authRequired":false,"latencyMs":389,"serverInfo":{"name":"argo-mcp","version":"1.1.0"}}],"packages":[{"registryType":"npm","identifier":"argo-mcp","version":"1.0.3","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-05-14T11:25:46.479Z","repositoryUrl":"git+https://github.com/Argo-RPG-Platform/MCP.git","weeklyDownloads":64}],"repo":{"found":true,"owner":"Argo-RPG-Platform","repo":"MCP","archived":false,"pushedAt":"2026-09-06T04:03:20Z","stars":1,"forks":0,"openIssues":2,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/200429031?v=4","ownerCreatedAt":"2025-02-22T21:34:47Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/200429031?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":64,"license":"MIT","lastPushAt":"2026-09-06T04:03:20.000Z","score":35}}}},"grade_history":[],"reviews":[]}