{"openapi":"3.1.0","info":{"title":"Pulumi Cloud (BYOK) API","version":"0.1.0","description":"Pulumi Cloud (BYOK) lets an AI assistant read your own Pulumi Cloud data through the Pulumi Cloud API with a key you supply (Pulumi access token (pul-...)). Read-only: 12 tools (get_current_user, list_my_stacks, get_stack, get_latest_update, get_update_summary, count_stack_resources, list_org_members, list_teams, list_org_deployments, list_esc_environments, list_audit_logs,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-pulumi.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-pulumi/docs"},"termsOfService":"https://connectorbay.com/byok-pulumi/terms"},"servers":[{"url":"https://byok-pulumi.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-pulumi/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/get_current_user":{"post":{"operationId":"get_current_user","summary":"Show the Pulumi Cloud account the token belongs to: id, name, GitHub login, email, MFA flag and organization memberships","description":"Show the Pulumi Cloud account the token belongs to: id, name, GitHub login, email, MFA flag and organization memberships with roles. Use for \"Which Pulumi account and organizations does my token belong to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_userArguments","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_my_stacks":{"post":{"operationId":"list_my_stacks","summary":"List stacks the token can access with organization, project, stack name, last update time (Unix seconds) and resource co","description":"List stacks the token can access with organization, project, stack name, last update time (Unix seconds) and resource count. Filter by organization, project or tag. Use for \"Which Pulumi stacks do I have in the acme organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only stacks owned by this organization.","title":"Organization"},"project":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only stacks in this project.","title":"Project"},"tag_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only stacks with this tag name.","title":"Tag Name"},"tag_value":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"With tag_name: only stacks whose tag has this value.","title":"Tag Value"},"max_results":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum stacks per page.","title":"Max Results"},"continuation_token":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Token from the previous answer's continuationToken field, to get the next page.","title":"Continuation Token"}},"title":"list_my_stacksArguments","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_stack":{"post":{"operationId":"get_stack","summary":"Get one stack: current version, tags, active update id and any operation currently running. Use for \"What is the state o","description":"Get one stack: current version, tags, active update id and any operation currently running. Use for \"What is the state of the acme/web-app/prod Pulumi stack\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"project_name":{"description":"Pulumi project name, for example 'web-app'.","maxLength":100,"title":"Project Name","type":"string"},"stack_name":{"description":"Pulumi stack name, for example 'prod'.","maxLength":100,"title":"Stack Name","type":"string"}},"required":["org_name","project_name","stack_name"],"title":"get_stackArguments","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_latest_update":{"post":{"operationId":"get_latest_update","summary":"Get the most recent update of a stack: kind (update, preview, refresh, destroy), result, message, start and end times an","description":"Get the most recent update of a stack: kind (update, preview, refresh, destroy), result, message, start and end times and resource changes. Use for \"Did the last Pulumi update of acme/web-app/prod succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"project_name":{"description":"Pulumi project name, for example 'web-app'.","maxLength":100,"title":"Project Name","type":"string"},"stack_name":{"description":"Pulumi stack name, for example 'prod'.","maxLength":100,"title":"Stack Name","type":"string"}},"required":["org_name","project_name","stack_name"],"title":"get_latest_updateArguments","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_update_summary":{"post":{"operationId":"get_update_summary","summary":"Get a short summary of one stack update by version number: result, start and end time and resource count. Use for \"How d","description":"Get a short summary of one stack update by version number: result, start and end time and resource count. Use for \"How did update 11 of acme/web-app/prod finish\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"project_name":{"description":"Pulumi project name, for example 'web-app'.","maxLength":100,"title":"Project Name","type":"string"},"stack_name":{"description":"Pulumi stack name, for example 'prod'.","maxLength":100,"title":"Stack Name","type":"string"},"version":{"description":"Stack update version number, as shown by get_stack or get_latest_update.","maximum":10000000,"minimum":0,"title":"Version","type":"integer"}},"required":["org_name","project_name","stack_name","version"],"title":"get_update_summaryArguments","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/count_stack_resources":{"post":{"operationId":"count_stack_resources","summary":"Get how many resources the stack currently manages, from its most recent update. Use for \"How many resources does acme/w","description":"Get how many resources the stack currently manages, from its most recent update. Use for \"How many resources does acme/web-app/prod manage\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"project_name":{"description":"Pulumi project name, for example 'web-app'.","maxLength":100,"title":"Project Name","type":"string"},"stack_name":{"description":"Pulumi stack name, for example 'prod'.","maxLength":100,"title":"Stack Name","type":"string"}},"required":["org_name","project_name","stack_name"],"title":"count_stack_resourcesArguments","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_org_members":{"post":{"operationId":"list_org_members","summary":"List the members of an organization with role, join date, suspension flag and the user's name, GitHub login and email. U","description":"List the members of an organization with role, join date, suspension flag and the user's name, GitHub login and email. Use for \"Who are the members of my Pulumi organization acme\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"type":{"anyOf":[{"enum":["backend","frontend"],"type":"string"},{"type":"null"}],"default":null,"description":"backend or frontend member list; the default is frontend.","title":"Type"},"include_suspended":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True (org admins only) to include suspended members.","title":"Include Suspended"},"continuation_token":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Token from the previous answer's continuationToken field, to get the next page.","title":"Continuation Token"}},"required":["org_name"],"title":"list_org_membersArguments","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_teams":{"post":{"operationId":"list_teams","summary":"List the teams of an organization with name, display name, kind (pulumi, github or scim) and description. Use for \"What ","description":"List the teams of an organization with name, display name, kind (pulumi, github or scim) and description. Use for \"What teams does the Pulumi organization acme have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"}},"required":["org_name"],"title":"list_teamsArguments","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_org_deployments":{"post":{"operationId":"list_org_deployments","summary":"List Pulumi Deployments runs across an organization with stack, operation (update, preview, destroy, refresh), status an","description":"List Pulumi Deployments runs across an organization with stack, operation (update, preview, destroy, refresh), status and times. Use for \"Which Pulumi deployments failed recently in acme\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Results per page (1 to 100).","title":"Page Size"},"asc":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True for oldest first; default is newest first.","title":"Asc"}},"required":["org_name"],"title":"list_org_deploymentsArguments","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_esc_environments":{"post":{"operationId":"list_esc_environments","summary":"List Pulumi ESC environments of an organization with project, name and created and modified times (values are not read).","description":"List Pulumi ESC environments of an organization with project, name and created and modified times (values are not read). Use for \"Which ESC environments exist in the Pulumi organization acme\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"max_results":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum environments per page.","title":"Max Results"},"continuation_token":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Token from the previous answer's nextToken field, to get the next page.","title":"Continuation Token"}},"required":["org_name"],"title":"list_esc_environmentsArguments","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_audit_logs":{"post":{"operationId":"list_audit_logs","summary":"List organization audit log events with time, event type, description, actor and token name. Times are Unix seconds. Use","description":"List organization audit log events with time, event type, description, actor and token name. Times are Unix seconds. Use for \"What happened in the Pulumi organization acme in the last day\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"description":"Pulumi organization name (for a personal account this is the username), for example 'acme'.","maxLength":100,"title":"Org Name","type":"string"},"start_time":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Lower bound, Unix timestamp in seconds.","title":"Start Time"},"end_time":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Upper bound, Unix timestamp in seconds.","title":"End Time"},"event_filter":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only events of this type.","title":"Event Filter"},"user_filter":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only events by this username.","title":"User Filter"},"continuation_token":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Token from the previous answer's continuationToken field, to get the next page.","title":"Continuation Token"}},"required":["org_name"],"title":"list_audit_logsArguments","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_registry_packages":{"post":{"operationId":"list_registry_packages","summary":"Search the Pulumi Registry for providers and components by text, with publisher, version, description and repository URL","description":"Search the Pulumi Registry for providers and components by text, with publisher, version, description and repository URL. Use for \"Find Pulumi packages for Cloudflare\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search text, for example 'cloudflare'.","title":"Search"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact package name.","title":"Name"},"publisher":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only packages from this publisher.","title":"Publisher"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Results per page (default 100).","title":"Limit"},"continuation_token":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Token from the previous answer's continuationToken field.","title":"Continuation Token"}},"title":"list_registry_packagesArguments","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}}}}