{"openapi":"3.1.0","info":{"title":"Microsoft Planner (BYOK) API","version":"0.1.0","description":"Microsoft Planner (BYOK) lets an AI assistant read your own Microsoft Planner data through the Microsoft Planner API with a key you supply (Microsoft Graph access token (an OAuth token valid for about an hour)). Read-only: 8 tools (list_my_plans, list_group_plans, get_plan, get_plan_details, list_plan_buckets, list_plan_tasks, get_task, get_bucket). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-graph-planner.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-graph-planner/docs"},"termsOfService":"https://connectorbay.com/byok-graph-planner/terms"},"servers":[{"url":"https://byok-graph-planner.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-graph-planner/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_my_plans":{"post":{"operationId":"list_my_plans","summary":"List the Planner plans the signed-in user can see, with title, owner group and creation time. Needs Tasks.Read. Use for ","description":"List the Planner plans the signed-in user can see, with title, owner group and creation time. Needs Tasks.Read. Use for \"Which Planner plans do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_my_plansArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_group_plans":{"post":{"operationId":"list_group_plans","summary":"List the Planner plans owned by a Microsoft 365 group with title and creation time. Needs Tasks.Read or Group.Read.All. ","description":"List the Planner plans owned by a Microsoft 365 group with title and creation time. Needs Tasks.Read or Group.Read.All. Use for \"Which Planner plans does group 00000000-0000-0000-0000-000000000001 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_id":{"description":"Object id (GUID) of the Microsoft 365 group.","maxLength":200,"title":"Group Id","type":"string"}},"required":["group_id"],"title":"list_group_plansArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_plan":{"post":{"operationId":"get_plan","summary":"Get one Planner plan: title, owner group, container and creation time. Needs Tasks.Read. Use for \"What is Planner plan x","description":"Get one Planner plan: title, owner group, container and creation time. Needs Tasks.Read. Use for \"What is Planner plan xqQg5FS2LkCp935s-FIFm2QAFkHM\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"plan_id":{"description":"Id of the Planner plan, from list_group_plans or list_my_plans.","maxLength":200,"title":"Plan Id","type":"string"}},"required":["plan_id"],"title":"get_planArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_plan_details":{"post":{"operationId":"get_plan_details","summary":"Get a plan's label names (category descriptions) used to tag tasks. Needs Tasks.Read. Use for \"What labels does Planner ","description":"Get a plan's label names (category descriptions) used to tag tasks. Needs Tasks.Read. Use for \"What labels does Planner plan xqQg5FS2LkCp935s-FIFm2QAFkHM use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"plan_id":{"description":"Id of the Planner plan, from list_group_plans or list_my_plans.","maxLength":200,"title":"Plan Id","type":"string"}},"required":["plan_id"],"title":"get_plan_detailsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_plan_buckets":{"post":{"operationId":"list_plan_buckets","summary":"List the buckets (columns) of a plan with name and order hint. Needs Tasks.Read. Use for \"What buckets does Planner plan","description":"List the buckets (columns) of a plan with name and order hint. Needs Tasks.Read. Use for \"What buckets does Planner plan xqQg5FS2LkCp935s-FIFm2QAFkHM have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"plan_id":{"description":"Id of the Planner plan, from list_group_plans or list_my_plans.","maxLength":200,"title":"Plan Id","type":"string"}},"required":["plan_id"],"title":"list_plan_bucketsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_plan_tasks":{"post":{"operationId":"list_plan_tasks","summary":"List the tasks of a plan with title, bucket, percent complete, priority, dates and checklist counts (assignees, descript","description":"List the tasks of a plan with title, bucket, percent complete, priority, dates and checklist counts (assignees, descriptions and checklist text are not returned). Needs Tasks.Read. Use for \"Which tasks in Planner plan xqQg5FS2LkCp935s-FIFm2QAFkHM are not finished\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"plan_id":{"description":"Id of the Planner plan, from list_group_plans or list_my_plans.","maxLength":200,"title":"Plan Id","type":"string"}},"required":["plan_id"],"title":"list_plan_tasksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_task":{"post":{"operationId":"get_task","summary":"Get one Planner task by id with title, bucket, progress, priority, dates and checklist counts. Needs Tasks.Read. Use for","description":"Get one Planner task by id with title, bucket, progress, priority, dates and checklist counts. Needs Tasks.Read. Use for \"What is the status of Planner task task-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"task_id":{"description":"Planner task id from list_plan_tasks.","maxLength":200,"title":"Task Id","type":"string"}},"required":["task_id"],"title":"get_taskArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_bucket":{"post":{"operationId":"get_bucket","summary":"Get one Planner bucket by id with its name and plan. Needs Tasks.Read. Use for \"What is Planner bucket bucket-1\".","description":"Get one Planner bucket by id with its name and plan. Needs Tasks.Read. Use for \"What is Planner bucket bucket-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bucket_id":{"description":"Planner bucket id from list_plan_buckets.","maxLength":200,"title":"Bucket Id","type":"string"}},"required":["bucket_id"],"title":"get_bucketArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}