{"serverInfo":{"name":"com.greatarrowdigital/great-arrow-digital","title":"GreatArrow.ai","version":"0.2.0"},"description":"Persistent cross-model memory + 40 connectable providers (Gmail, Slack, Notion, GitHub) via MCP.","websiteUrl":"https://www.greatarrow.ai","documentationUrl":"https://www.greatarrow.ai/install.md","protocolVersion":"2025-06-18","supportedProtocolVersions":["2025-06-18","2025-03-26","2024-11-05"],"transport":{"type":"streamable-http","endpoint":"https://www.greatarrow.ai/api/mcp"},"remotes":[{"type":"streamable-http","url":"https://www.greatarrow.ai/api/mcp"}],"authentication":{"required":true,"schemes":["oauth2"]},"tools":[{"name":"memory_search","description":"PROACTIVE: call before answering any prompt referencing prior work, projects, files, decisions, people, or tickets. Semantic search across all four memory layers; hits include `url`/`fileName` for external sources. Weigh each hit's `freshness` (\"fresh\"|\"aging\"|\"stale\") and `ageDays` — re-verify stale/superseded hits against a live source before treating them as current.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural-language query."},"k":{"type":"integer","minimum":1,"maximum":20},"layer":{"type":"string","enum":["WORKING","EPISODIC","SEMANTIC","PROCEDURAL"]},"skipExpansion":{"type":"boolean","description":"Bypass HyDE query expansion for exact keyword search."},"explain":{"type":"boolean","description":"Attach the per-stage ranking breakdown to each hit."}},"required":["query"]},"annotations":{"title":"Memory search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"memory_list","description":"List recent memories (titles + content previews), optionally filtered by layer and/or tag. Use memory_get for a memory's full content.","inputSchema":{"type":"object","properties":{"layer":{"type":"string","enum":["WORKING","EPISODIC","SEMANTIC","PROCEDURAL"]},"tag":{"type":"string"},"limit":{"type":"number","description":"Max memories to return (default 50, cap 200)."},"include_system_notes":{"type":"boolean"}}},"annotations":{"title":"Memory list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"memory_get","description":"Fetch a single memory by id.","inputSchema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"annotations":{"title":"Memory get","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search","description":"PROACTIVE: Call before answering any question about prior work. Simplified alias for memory_search. Returns { results: [{ id, title, text, url?, fileName? }] } for `fetch`. If you need tools beyond search (GitHub, email, calendar, Slack, etc.), call tools_discover.","inputSchema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"annotations":{"title":"Search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"fetch","description":"Retrieve the full content of a `search` result by id. Always call this to cite the full text of top hits rather than relying on the search summary alone.","inputSchema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"annotations":{"title":"Fetch","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"workspace_introspect","description":"Active workspace, integrations, top tags, and recent activity. Use when asked for orientation or needed for the workspace task, not automatically at session start. The workspace has 563 available tools.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Workspace introspect","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"mcp_capabilities","description":"Structured manifest of every MCP tool grouped by scope.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"MCP capabilities","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"todo_list","description":"List kanban cards by priority across your workspaces. Each includes a chat-ready `url`.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["backlog","open","in_progress","review","done","dismissed","archived"]},"priority":{"type":"string","enum":["urgent","high","medium","low"]},"source":{"type":"string","enum":["manual","ai_suggestion","integration","memory"]},"includeArchived":{"type":"boolean"},"assignee":{"type":"string","description":"\"me\", \"self\", or user ID."},"parentId":{"type":"string","description":"Goal ID."},"epicsOnly":{"type":"boolean","description":"Only Goals."},"sources":{"type":"array","items":{"type":"string"}},"ranked":{"type":"boolean","description":"Triage order."},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Default 20."}}},"annotations":{"title":"Todo list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"agent_resume_latest","description":"Use when asked to resume a task or told an open handoff exists. Fetches unresolved handoffs: summary, status, next steps, files, cursor, blockers, and linked card. Not for automatic session-start retrieval.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":20,"description":"How many open handoffs to return (default 5)."}}},"annotations":{"title":"Agent resume latest","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"tools_discover","description":"Search the 563-tool catalog for requested capabilities. Returns schemas; does not execute tools.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","enum":["mcp:read","mcp:write","mcp:agents","mcp:integrations","mcp:admin"]},"query":{"type":"string"},"tool_name":{"type":"string","description":"Exact name; includes schema without I/O."},"include_schemas":{"type":"boolean","description":"Attach schemas; caps results at 5."},"detail":{"type":"string","enum":["compact","full"],"description":"compact skips I/O; full adds metadata."},"limit":{"type":"number","description":"Default 10; max 100 (5 with schemas)."}}},"annotations":{"title":"Tools discover","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"suggestion_feedback","description":"Record the user's reaction to a surfaced tip, attention row or suggestion ('useful' → helpful; 'stop showing these' → mute_category/mute_all). itemId is the marker id verbatim: `[tip: <id>]`, an attention key `goal:<kind>:<id>`, or a suggested Goal task's `roadmap_member:<GoalId>:<taskId>` (with not_helpful). Dismissals are GLOBAL, shared with the web.","inputSchema":{"type":"object","properties":{"itemType":{"type":"string","enum":["tip","attention","blocker","card_suggestion","split_suggestion","application_suggestion"]},"todoId":{"type":"string","description":"blocker only: the card the blocker was suggested for."},"itemId":{"type":"string"},"category":{"type":"string","description":"The tip category, when known."},"feedback":{"type":"string","enum":["helpful","not_helpful","mute_category","mute_all"]}},"required":["itemType","itemId","feedback"]},"annotations":{"title":"Suggestion feedback","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"agent_invoke","description":"Run a single specialist agent against a task and return its output.","inputSchema":{"type":"object","properties":{"agentId":{"type":"string"},"task":{"type":"string"},"retrieve":{"type":"boolean"},"context":{"type":"string"},"sessionId":{"type":"string"}},"required":["agentId","task"]},"annotations":{"title":"Agent invoke","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"orchestrator_run","description":"Assign a multi-step goal to the workspace orchestrator: it decomposes the query and routes to specialists. Text-only ceiling: research, draft, plan, file subtasks — code work goes to your connected coding agents. mode preview says what would run and runs nothing.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"goal_id":{"type":"string","description":"Work an EXISTING Goal card's children (max 6): one specialist each, moved to review. Creates and deletes nothing; `query` is the run note."},"mode":{"type":"string","enum":["preview","run"]},"sessionId":{"type":"string"},"retrieve":{"type":"boolean"}},"required":["query"]},"annotations":{"title":"Orchestrator run","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"scheduled_run_create","description":"Schedule a recurring orchestrator run at anchorTime in the given timezone. Results land on the kanban board like manual runs. Pro+ only.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"goal_id":{"type":"string","description":"Work an EXISTING Goal card on this cadence instead of free text; `query` is kept as the run note."},"cadence":{"type":"string","enum":["hourly","daily","weekdays","weekly"]},"anchorTime":{"type":"string","description":"HH:MM 24h; required for daily/weekdays/weekly"},"weekday":{"type":"integer","minimum":0,"maximum":6,"description":"0 = Sunday; required for weekly"},"timezone":{"type":"string","description":"IANA zone, default UTC"},"retrieve":{"type":"boolean"}},"required":["query","cadence"]},"annotations":{"title":"Scheduled run create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"scheduled_run_list","description":"List scheduled agent runs with cadence, next/last run time, and status. all_workspaces adds every other readable workspace — use it when a watcher seems dead, since one bound elsewhere is invisible here.","inputSchema":{"type":"object","properties":{"all_workspaces":{"type":"boolean","description":"Also list other readable workspaces. Editing still needs the owning one."}}},"annotations":{"title":"Scheduled run list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"meeting_schedule","description":"Schedule a meeting from a natural-language prompt. ALWAYS call mode:\"preview\" FIRST: it returns clarifications, suggestedSlots and a draft agenda and creates nothing. Relay those, then call mode:\"create\" (default) with the answers folded into `prompt`. `timezone`: IANA, else UTC.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string"},"mode":{"type":"string","enum":["preview","create"]},"timezone":{"type":"string"},"overrideStart":{"type":"string","description":"HH:MM."},"overrideEnd":{"type":"string","description":"HH:MM."},"stated_intent":{"type":"string","maxLength":500,"description":"One sentence stating what this irreversible action will do and why now. Articulating intent before acting is required when the workspace's stated-intent policy is on, and always recommended — it routes the decision through deliberate reasoning."}},"required":["prompt"]},"annotations":{"title":"Meeting schedule","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"todo_assign","description":"Assign a private card to an authorized member or agent. External agents require a live agents_now targetId. Queues work by default; requested run:true starts a billable in-GAD agent that may search the web or send meeting invitations.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"The todo ID to assign."},"agentId":{"type":"string"},"assignee_type":{"type":"string","enum":["member","specialist","custom_agent","external_agent"]},"targetId":{"type":"string","description":"external_agent: live connection id from agents_now, or \"self\". member: a user id, or \"me\"/\"self\" for the calling user. Never a display name."},"run":{"type":"boolean","description":"Immediately run after queuing. Default false."},"stated_intent":{"type":"string","maxLength":500,"description":"One sentence stating what this irreversible action will do and why now. Articulating intent before acting is required when the workspace's stated-intent policy is on, and always recommended — it routes the decision through deliberate reasoning."}},"required":["id"]},"annotations":{"title":"Todo assign","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"memory_create","description":"Remember requested content in the private workspace; optional HTTP probes schedule URL checks. Use memory_search first to deduplicate; omit unrelated conversation.","inputSchema":{"type":"object","properties":{"content":{"type":"string"},"title":{"type":"string"},"layer":{"type":"string","enum":["WORKING","EPISODIC","SEMANTIC","PROCEDURAL"]},"source":{"type":"string","enum":["PASTE","UPLOAD","GMAIL","GDRIVE","GCAL","OUTLOOK","TEAMS","SLACK","DISCORD","ASANA","NOTION","JIRA","CONFLUENCE","ZOOM","GMEET","GRANOLA","FIREFLIES","DROPBOX","CANVA","GITHUB","GITLAB","AGENT","OTHER","CHAT","ORCHESTRATOR","MCP_TOOL","GA4","CLARITY","FIGMA","EMAIL","OUTLOOK_CAL"],"description":"Memory origin; defaults to PASTE."},"tags":{"type":"array","items":{"type":"string"},"description":"Short normalized tags; auto-derived when omitted."},"verification_probe":{"type":"object","description":"Optional nightly re-check so a stale fact stops being trusted. Measurable claims only (number/string/absence), never a judgement. Refuted invalidates; never rewrites. {kind:\"sql\",query|\"http\",url, expect:{op,value}}; op=eq|lt|gt|contains|absent; SQL=one read-only SELECT, one row/column."},"targetWorkspaceId":{"type":"string","description":"Workspace UUID to save into after user confirmation."}},"required":["content"]},"annotations":{"title":"Memory create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"memory_update","description":"Edit private memory metadata/status (including DELETED); optional HTTP probes schedule URL checks. No source write-back.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"verified":{"type":"boolean","enum":[true],"description":"Mark still accurate: clears the invalidation so a replaced fact is used again. Undoes a knowledge_health `recentReplacements` entry."},"layer":{"type":"string","enum":["WORKING","EPISODIC","SEMANTIC","PROCEDURAL"]},"importance":{"type":"number","minimum":0,"maximum":1},"status":{"type":"string","enum":["ACTIVE","ARCHIVED","DELETED"]},"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the full tag set. [] clears; omit to leave unchanged."},"expected_version":{"type":"number","description":"`version` from memory_get; mismatch fails with version_conflict (409) + currentVersion. Omit for last-write-wins."},"verification_probe":{"type":["object","null"],"description":"Attach, replace, or (null) remove the nightly claim re-check — same shape and rules as memory_create. Changing it clears any prior verdict."},"stated_intent":{"type":"string","maxLength":500,"description":"Why this action is needed now."}},"required":["id"]},"annotations":{"title":"Memory update","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"memory_delete","description":"Soft-delete a memory.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"stated_intent":{"type":"string","maxLength":500,"description":"One sentence stating what this irreversible action will do and why now. Articulating intent before acting is required when the workspace's stated-intent policy is on, and always recommended — it routes the decision through deliberate reasoning."}},"required":["id"]},"annotations":{"title":"Memory delete","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"memory_feedback","description":"Record feedback on a memory's quality — wrong, irrelevant, outdated, or helpful. Adjusts importance so the system learns which memories are valuable.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["irrelevant","wrong","outdated","helpful"]},"comment":{"type":"string"}},"required":["id","kind"]},"annotations":{"title":"Memory feedback","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"chat_transcript_ingest","description":"Saves a conversation to the user's Great Arrow workspace: the `messages` and `summary` are sent to Great Arrow's servers and stored there, where the user views or deletes them under Your Stuff → Conversations. Call only when the user asks you to save the conversation — never unprompted.","inputSchema":{"type":"object","properties":{"summary":{"type":"string","description":"A short natural-language summary of the conversation. This alone is a complete save."},"messages":{"type":"array","minItems":1,"maxItems":200,"description":"Optional verbatim turns. Send only when the user asked for the conversation itself to be retained; a summary alone is sufficient.","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant","system","tool"]},"content":{"type":"string"},"agent":{"type":"string"}},"required":["role","content"]}},"external_session_id":{"type":"string"},"client_source":{"type":"string"},"summary_only":{"type":"boolean","description":"With summary, messages may be omitted."},"unprompted":{"type":"boolean"}},"required":["summary"]},"annotations":{"title":"Chat transcript ingest","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"request_user_action","description":"Create a private card for an authorized human action. Deduplicate by source_ref; store links without opening them. Omit credentials.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"action_url":{"type":"string","description":"Deep link / console URL where the user performs the action (full https URL)."},"source_ref":{"type":"string","description":"Stable dedup key (e.g. 'config:STRIPE_REVENUE_CLIENT_ID'); defaults to a slug of the title."},"assign_to":{"type":"string","description":"User id to assign; defaults to the calling user."}},"required":["title"]},"annotations":{"title":"Request user action","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"todo_create","description":"Create a card in an authorized private workspace. '- [ ] step' lines become checklist items; no public posting.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string","description":"'- [ ] step' lines auto-convert to checklist items."},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"status":{"type":"string","enum":["backlog","open","in_progress","review","done","dismissed","archived"]},"dueAt":{"type":"string"},"start_date":{"type":"string"},"action_url":{"type":"string","description":"Manual-action deep link; rendered as a button."},"action_label":{"type":"string","description":"≤80 chars."},"targetWorkspaceId":{"type":"string","description":"Omit to auto-route."},"parent_id":{"type":"string","description":"The Goal this card belongs to."},"blocked_by_id":{"type":"string","description":"Card that must finish first. Empty string = none."},"waiting_on":{"type":"string","description":"External party this card waits on."},"waiting_until":{"type":"string","description":"YYYY-MM-DD the wait is expected back."},"labels":{"type":"array","items":{"type":"string"}},"assignee":{"type":"object","description":"external_agent targetId: live id from agents_now (or \"self\"), never a display name.","properties":{"type":{"type":"string","enum":["member","specialist","custom_agent","external_agent"]},"targetId":{"type":"string"}},"required":["type","targetId"]},"evidence":{"type":"array","items":{"type":"string"},"description":"Observations as \"<provenance>: <detail>\". Provenance: prod_query|prod_http|repo_at_sha|third_party_api|local_file|local_env. Support is computed server-side: a production claim evidenced only by local_* is UNSUPPORTED."},"claim_scope":{"type":"string","enum":["production","repo","local","unspecified"],"description":"Inferred from the card's words when omitted."},"checklist_items":{"type":"array","items":{"type":"string"}},"custom_fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"value":{}},"required":["fieldId","value"]}}},"required":["title"]},"annotations":{"title":"Todo create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"todo_update","description":"Replace private card fields or archive the card.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"todo_id":{"type":"string","description":"Alias for id."},"expected_version":{"type":"number","description":"Version from last read. Conflict returns current card; merge and retry."},"title":{"type":"string"},"description":{"type":"string"},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"status":{"type":"string","enum":["backlog","open","in_progress","review","done","dismissed","archived"]},"dueAt":{"type":["string","null"],"description":"ISO datetime; null clears."},"start_date":{"type":["string","null"],"description":"ISO datetime; null clears."},"action_url":{"type":"string","description":"Empty string clears."},"action_label":{"type":"string","description":"≤80 chars."},"parent_id":{"type":"string","description":"Empty string detaches."},"blocked_by_id":{"type":"string","description":"Card that must finish first. Empty string detaches."},"waiting_on":{"type":"string","description":"External party. Empty string clears."},"waiting_until":{"type":"string","description":"YYYY-MM-DD; empty clears."},"client_shared":{"type":"boolean","description":"Show in the client view. Private by default."},"human_only":{"type":["boolean","null"]},"labels":{"type":"array","items":{"type":"string"}},"assignee":{"type":"object","description":"external_agent targetId: live id from agents_now (or \"self\"), never a display name.","properties":{"type":{"type":"string","enum":["member","specialist","custom_agent","external_agent"]},"targetId":{"type":"string"}},"required":["type","targetId"]},"evidence":{"type":"array","items":{"type":"string"},"description":"Observations as \"<provenance>: <detail>\". Provenance: prod_query|prod_http|repo_at_sha|third_party_api|local_file|local_env. Support is computed server-side: a production claim evidenced only by local_* is UNSUPPORTED."},"claim_scope":{"type":"string","enum":["production","repo","local","unspecified"],"description":"Inferred from the card's words when omitted."},"custom_fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"value":{}},"required":["fieldId","value"]}},"stated_intent":{"type":"string","maxLength":500,"description":"Why this action is needed now."}},"required":["id"]},"annotations":{"title":"Todo update","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"todo_log","description":"Append a private card note or replace supplied resume fields. Omitted fields stay unchanged.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"todo_id":{"type":"string","description":"Alias for id."},"note":{"type":"string"},"resumeState":{"type":"object","properties":{"summary":{"type":"string"},"nextSteps":{"type":"array","items":{"type":"string"}},"filesTouched":{"type":"array","items":{"type":"string"}},"cursor":{"type":"string"},"activeConcepts":{"type":"array","maxItems":25,"items":{"type":"string","maxLength":300},"description":"Ideas in play, uncaptured."},"workingAssumptions":{"type":"array","maxItems":15,"items":{"type":"string","maxLength":500},"description":"Verify; don't inherit."}}},"stated_intent":{"type":"string","maxLength":500,"description":"Why this action is needed now."}},"required":["id"]},"annotations":{"title":"Todo log","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"work_claim","description":"Claim exclusive ownership of work BEFORE implementing it, so parallel agents don't duplicate it. granted:true returns your card; granted:false names the holder and lease expiry — do NOT start; build on their branch or pick something else. Re-claiming your own key extends it.","inputSchema":{"type":"object","properties":{"claim_key":{"type":"string","description":"Stable id for the work (finding id / feature slug)."},"card_id":{"type":"string","description":"Existing card to attach to; else reused or created."},"ttl_minutes":{"type":"number","description":"Lease length in minutes (default 30)."}},"required":["claim_key"]},"annotations":{"title":"Work claim","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"work_heartbeat","description":"Extend your work_claim lease at least once per ttl_minutes. lease_lost is TERMINAL (retryable:false): stop heartbeating, work_claim again.","inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"Claimed card id (8+ char prefix ok)."},"claim_key":{"type":"string","description":"Instead of card_id."},"ttl_minutes":{"type":"number","description":"New lease length in minutes (default 30)."}}},"annotations":{"title":"Work heartbeat","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"work_release","description":"Release your work-claim (frees the key for others) when you open a PR or move the card to review/done. Idempotent.","inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"The claimed card id."}},"required":["card_id"]},"annotations":{"title":"Work release","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticket_create","description":"File a UI ticket from a UI observation (e.g. an Agentation annotation): a `note` on what's wrong, optionally the page `url` and element CSS/text/tag. Child repo/project workspace → lands in the parent app workspace's Todo column, tagged `ui-ticket`. For agent task planning use todo_create instead.","inputSchema":{"type":"object","properties":{"note":{"type":"string","description":"Becomes the card title + description."},"url":{"type":"string"},"elementSelector":{"type":"string"},"elementText":{"type":"string"},"elementTag":{"type":"string","description":"e.g. 'button'."},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"category":{"type":"string","enum":["bug","idea","question","task"]}},"required":["note"]},"annotations":{"title":"Ticket create","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"agent_handoff_checkpoint","description":"Saves a handoff checkpoint to the user's Great Arrow workspace: the summary and any `messages` are sent to Great Arrow's servers and stored there, where the user views or deletes them under Your Stuff → Conversations. Call only when the user asks to hand off, pause, or checkpoint the work — never unprompted.","inputSchema":{"type":"object","properties":{"reason":{"type":"string","enum":["context_window_near_limit","token_budget_near_limit","manual_handoff","pause","other"]},"summary":{"type":"string","maxLength":8000},"current_status":{"type":"string","maxLength":4000},"next_steps":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":500}},"files_touched":{"type":"array","maxItems":50,"items":{"type":"string","maxLength":300}},"cursor":{"type":"string","maxLength":1000},"blocked_on":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":500}},"active_concepts":{"type":"array","maxItems":25,"items":{"type":"string","maxLength":300},"description":"Ideas in play, uncaptured."},"working_assumptions":{"type":"array","maxItems":15,"items":{"type":"string","maxLength":500},"description":"Verify; don't inherit."},"todo_id":{"type":"string"},"messages":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant","system","tool"]},"content":{"type":"string"},"agent":{"type":"string"}},"required":["role","content"]}},"external_session_id":{"type":"string"},"client_source":{"type":"string"},"summary_only":{"type":"boolean"},"token_usage":{"type":"object","properties":{"model":{"type":"string"},"input_tokens":{"type":"integer","minimum":0},"output_tokens":{"type":"integer","minimum":0},"cost_usd":{"type":"number","minimum":0},"external_actual_cost_usd":{"type":"number","minimum":0},"client_source":{"type":"string"},"session_summary":{"type":"string"},"category":{"type":"string","enum":["external_ai","third_party_integration"]},"session_id":{"type":"string"}},"required":["model","input_tokens","output_tokens"]}},"required":["summary"]},"annotations":{"title":"Agent handoff checkpoint","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"tools_enable","description":"Expose named tools for this session from the 563-tool catalog. Does not grant permissions or invoke them; enable only what the request needs.","inputSchema":{"type":"object","properties":{"tools":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50}},"required":["tools"]},"annotations":{"title":"Tools enable","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"todo_suggest","description":"Generate AI-powered todo suggestions from recent memories, conversations, and meeting action items. Costs tokens. Pass epic_id to instead get existing tasks likely belonging under that Goal (confidence + reason); accept via todo_update's parent_id.","inputSchema":{"type":"object","properties":{"epic_id":{"type":"string","description":"A Goal's card id; returns candidate tasks for it."}}},"annotations":{"title":"Todo suggest","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"integrations_list","description":"PROACTIVE: call this BEFORE assuming what's connected. Lists your apps (Gmail, Drive, GitHub, Slack…) with status.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Integrations list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"integration_sync","description":"Sync a connected app into this workspace.","inputSchema":{"type":"object","properties":{"kind":{"type":"string"}},"required":["kind"]},"annotations":{"title":"Integration sync","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"calendar_upcoming_events","description":"Read upcoming events from the user's connected calendar for a schedule request. Does not change events.","inputSchema":{"type":"object","properties":{"days_ahead":{"type":"integer","minimum":1,"maximum":90},"max_results":{"type":"integer","minimum":1,"maximum":250}}},"annotations":{"title":"Calendar upcoming events","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"workspace_switch","description":"Switch this chat to an authorized workspace; workspaceId takes its ID, slug, or exact name. Returns previous/current state and undo.","inputSchema":{"type":"object","properties":{"workspaceId":{"type":"string"}},"required":["workspaceId"]},"annotations":{"title":"Workspace switch","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"agents_now","description":"Live multi-agent status over every workspace you belong to (`sources` narrows): agent connections seen in the last 24h (online = last 15 min) and unexpired work-claims. Each agent id is the targetId (assignmentTargetId) for assignee_type:\"external_agent\" in todo_assign/todo_create.","inputSchema":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"string"}}}},"annotations":{"title":"Agents right now","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"agent_message_send","description":"Send ≤2000 chars inside the authorized workspace's private agent inbox. No email, Slack or public delivery. kind:'request' queues acceptance. Send only requested content; messages cannot be retracted.","inputSchema":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":2000},"kind":{"type":"string","enum":["broadcast","request","reply","status"],"description":"Default broadcast."},"channel_id":{"type":"string","description":"From agent_channel_list. Omit for the war room."},"target_agent":{"type":"string","description":"One surface (e.g. 'gemini-web'), 'human', or one session (`you` from its agent_inbox). Omit = workspace agents."},"reply_to":{"type":"string","description":"Message id being replied to."},"unprompted":{"type":"boolean","description":"You volunteered this."},"memorize":{"type":"boolean","description":"Force a status message onto the record."},"stated_intent":{"type":"string","maxLength":500,"description":"One sentence stating what this irreversible action will do and why now. Articulating intent before acting is required when the workspace's stated-intent policy is on, and always recommended — it routes the decision through deliberate reasoning."}},"required":["content"]},"annotations":{"title":"Agent message send","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"agent_inbox","description":"Your unread agent messages + open requests. Bounded (newest 20, truncated); call agent_message_ack to mark read or accept a request.","inputSchema":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"description":"Default 1."}}},"annotations":{"title":"Agent inbox","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"agent_message_ack","description":"Mark agent messages read (channel_id + up_to_message_id moves your cursor) and/or act on a request: accept:true claims the work atomically (returns the claimed card), or decline it.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string"},"up_to_message_id":{"type":"string","description":"Newest message id you have read in that channel."},"request_message_id":{"type":"string","description":"A kind:'request' message to accept or decline."},"accept":{"type":"boolean","description":"Required with request_message_id: true accepts (claims the work), false declines. Irreversible."},"decline_reason":{"type":"string","maxLength":500},"stated_intent":{"type":"string","maxLength":500,"description":"Why this action is needed now."}}},"annotations":{"title":"Agent message ack","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"agent_channel_list","description":"Agent comms channels (war room + threads) with unread + open-request counts for your identity.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Agent channel list","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"agent_channel_resolve","description":"Close a comms THREAD so it stops surfacing. Not the war room; to answer a request use agent_message_ack.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string"}},"required":["channel_id"]},"annotations":{"title":"Agent channel resolve","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"workspace_query","description":"Run a read-only tool in another authorized workspace without switching this chat; the target may access the public web.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"ID, slug, or exact name."},"tool_name":{"type":"string"},"args":{"type":"object","additionalProperties":true}},"required":["workspace","tool_name"]},"annotations":{"title":"Workspace query","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"gad_call","description":"Invoke a named Great Arrow tool with normal checks.","inputSchema":{"type":"object","properties":{"tool_name":{"type":"string","description":"Exact tool name."},"args":{"type":"object","description":"Target arguments."}},"required":["tool_name"]},"annotations":{"title":"Invoke Great Arrow tool","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"gad_call_read","description":"Run a read-only tool by name.","inputSchema":{"type":"object","properties":{"tool_name":{"type":"string"},"args":{"type":"object"}},"required":["tool_name"]},"annotations":{"title":"Read-only tool call","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"gad_call_write","description":"Run a tool by name; may write.","inputSchema":{"type":"object","properties":{"tool_name":{"type":"string"},"args":{"type":"object"}},"required":["tool_name"]},"annotations":{"title":"Tool call (may write)","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}],"resources":[{"uri":"great-arrow://docs/onboarding","name":"Orientation guide","description":"Read first. Tells the agent to call workspace_introspect -> mcp_capabilities, and how to handle insufficient_scope errors.","mimeType":"text/markdown"},{"uri":"great-arrow://docs/recipes","name":"Recipes","description":"Worked end-to-end examples (sync GitHub -> research-analyst -> memory_create; weekly Slack digest; cloud-storage import -> document_search).","mimeType":"text/markdown"},{"uri":"great-arrow://docs/scopes","name":"OAuth scope reference","description":"Lists every MCP scope and the tools each one grants - what to ask the user to re-authorize when the agent hits insufficient_scope.","mimeType":"text/markdown"},{"uri":"great-arrow://integrations/status","name":"Integration status","description":"Live snapshot of every app connected to the active workspace: kind, account, last sync, sync count, errors. Read before deciding whether to call calendar_upcoming_events / integration_sync / memory_search against app-derived rows.","mimeType":"text/markdown"}],"prompts":[{"name":"get_started","description":"First time here? See what Great Arrow already remembers for you and save the first thing worth keeping.","arguments":[]},{"name":"find_in_workspace","description":"Semantic search across the user's workspace memory + uploaded documents and ground an answer in the hits.","arguments":[{"name":"query","description":"What to look up.","required":true}]},{"name":"what_changed_recently","description":"Summarise recent activity across all connected integrations (GitHub, Slack, Gmail, calendar, etc.).","arguments":[]},{"name":"audit_integrations","description":"List every integration connected to the active workspace and flag any that haven't synced recently.","arguments":[]},{"name":"whats_on_my_plate","description":"Read the workspace kanban board and the next few days of calendar, and report what needs the user's attention.","arguments":[]},{"name":"capture_decision","description":"Save a decision the user has made into workspace memory, checking first for a memory that already covers it.","arguments":[{"name":"decision","description":"The decision to record, in the user's own words.","required":true}]},{"name":"goal_progress","description":"Report where the workspace's Goals stand: their tasks, progress, and pace-based finish estimate.","arguments":[{"name":"goal","description":"Which Goal to report on. Omit for every Goal.","required":false}]}]}