{"apiVersion":"v1","directorySlug":"orkestr-mcp-1424d92a0d","title":"orkestr","description":"The EU cloud where AI agents ship and operate real software, not just write it. Deploy apps, run untrusted code in isolated sandboxes, and give every agent a scoped identity with an approval gate and a full audit trail.","pageUrl":"https://www.mcpbundles.com/skills/orkestr-mcp-1424d92a0d","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://api.orkestr.eu/api/mcp","hostedMcpUrl":null,"toolCount":76,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"eu.orkestr/orkestr-mcp-1424d92a0d","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"whoami","description":"Show the currently authenticated user's username, email, and plan.","inputSchema":{"type":"object","properties":{}},"logicalName":"whoami","displayName":"whoami","title":"whoami","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_projects","description":"List all projects owned by the current user (plus projects in teams you belong to). Optional 'limit' caps how many are returned (default 20). Returns {\"projects\": [...], \"total\": <int>}, where total is the full count and may exceed the number returned when limited. Each project's env_vars values are masked.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20}}},"logicalName":"list_projects","displayName":"list_projects","title":"list_projects","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_project","description":"Get details of one project. Provide exactly one of project_name or project_id. Returns the project object with keys including id, name, display_name, repo_url, repo_branch, framework, has_dockerfile, domain, status, effective_plan, env_vars (values masked), resource_config, created_at, updated_at.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_project","displayName":"get_project","title":"get_project","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"reproduce_in_browser","description":"Show / preview / screenshot what a page or UI actually LOOKS LIKE in a real browser (shareable video + screenshots). `steps` MUST be the SOURCE of a JavaScript Playwright function `async ({page, env, snap}) => { await page.goto(env.APP_URL); await snap(\"home\"); }` - NOT prose, NOT a numbered list of instructions. Drives a headless Chromium against the project's DEPLOYED app, records the session, returns public CDN links.","inputSchema":{"type":"object","required":["steps"],"properties":{"steps":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"step_timeout_seconds":{"type":"integer","default":120}}},"logicalName":"reproduce_in_browser","displayName":"reproduce_in_browser","title":"reproduce_in_browser","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_project","description":"Create a new project and auto-create its production environment. Required: name (lowercase, ^[a-z0-9][a-z0-9-]*$, globally unique - 409 if taken), display_name, repo_url. Optional: repo_branch (default 'main'), description, env_vars (dict), resource_config (dict). Returns the created project including 'id', 'name', and 'status'. Returned env_vars values are masked. When called by an agent this is gated: it returns a pending result and runs only after the owner approves.","inputSchema":{"type":"object","required":["name","display_name","repo_url"],"properties":{"name":{"type":"string"},"env_vars":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null},"repo_url":{"type":"string"},"repo_branch":{"type":"string","default":"main"},"display_name":{"type":"string"},"resource_config":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null}}},"logicalName":"create_project","displayName":"create_project","title":"create_project","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_project","description":"Update a project's settings. Identify it with exactly one of project_name or project_id, then pass any of: display_name, description, repo_branch, env_vars (dict), resource_config (dict), domain. Omitted fields are left unchanged. Returns the full updated project object; env_vars values are masked.","inputSchema":{"type":"object","properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"env_vars":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"repo_branch":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"resource_config":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null}}},"logicalName":"update_project","displayName":"update_project","title":"update_project","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_project","description":"Delete a project and destroy its containers. This is irreversible.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"delete_project","displayName":"delete_project","title":"delete_project","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_repo_tree","description":"List the source file paths of a project's connected repo (read-only). GitHub repos only - GitLab/Bitbucket/Codeberg are not supported and raise an error. Identify the project with exactly one of project_name or project_id; pass 'ref' for a branch/tag/SHA (defaults to the project's branch). The git credential stays server-side. Returns {\"repo\", \"ref\", \"files\" (list of paths), \"truncated\" (true = listing was capped/incomplete)}.","inputSchema":{"type":"object","properties":{"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_repo_tree","displayName":"list_repo_tree","title":"list_repo_tree","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_repo_file","description":"Read one text file from a project's connected repo (read-only). GitHub repos only - other providers raise an error. Required: path. Identify the project with exactly one of project_name or project_id; pass 'ref' to override the project's branch. Returns {\"repo\", \"ref\", \"path\", \"size\", \"truncated\" (true = content cut off at the size cap), \"content\" (the file text)}. Pointing at a directory raises an error - use list_repo_tree to browse.","inputSchema":{"type":"object","required":["path"],"properties":{"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"path":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"read_repo_file","displayName":"read_repo_file","title":"read_repo_file","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_pull_requests","description":"List pull requests on a project's connected GitHub repo (read-only). GitHub repos only - other providers raise an error. Identify the project with exactly one of project_name or project_id. 'state' is one of 'open' (default), 'closed', or 'all'; 'limit' caps results (default 20, max 50). The git credential stays server-side. Returns {\"repo\", \"state\", \"pull_requests\": [{number, title, state, draft, author, head, base, url, created_at, updated_at}], \"total\"}. Use get_pull_request for one PR's body","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20},"state":{"type":"string","default":"open"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_pull_requests","displayName":"list_pull_requests","title":"list_pull_requests","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_pull_request","description":"Read one pull request on a project's connected GitHub repo, with its changed files and per-file diffs (read-only). GitHub repos only. Required: number (the PR number, from list_pull_requests). Identify the project with exactly one of project_name or project_id. The git credential stays server-side. Returns the PR metadata ({number, title, body, state, draft, merged, mergeable, author, head, head_sha, base, additions, deletions, changed_files, url, created_at, updated_at}) plus \"files\": [{filenam","inputSchema":{"type":"object","required":["number"],"properties":{"number":{"type":"integer"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_pull_request","displayName":"get_pull_request","title":"get_pull_request","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"open_pull_request","description":"Open a pull request on a project's GitHub repo with file changes (GitHub repos only). Required: title, body, changes. 'changes' maps file path -> the file's full new text content (string values; limited count/size). Identify the project with exactly one of project_name or project_id; 'base_branch' defaults to the project's branch. The git credential stays server-side. On success this performs server-side writes - it creates a new head branch, commits each file, and opens the PR - and returns {\"r","inputSchema":{"type":"object","required":["title","body","changes"],"properties":{"body":{"type":"string"},"changes":{"type":"object","additionalProperties":true},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"base_branch":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"open_pull_request","displayName":"open_pull_request","title":"open_pull_request","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"analyze_project","description":"Analyze a project's repository to detect framework/runtime and generate a Dockerfile. Identify it with exactly one of project_name or project_id. Returns an analysis object (NOT the project): {\"framework\", \"runtime\", \"has_dockerfile\", \"detected_port\", \"suggested_cpu\", \"suggested_memory\", \"dockerfile_content\"}. framework/runtime/detected_port/dockerfile_content may be null if detection fails. Side effect: stores the detected framework/has_dockerfile (and resource_config if unset) on the project.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"analyze_project","displayName":"analyze_project","title":"analyze_project","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_environments","description":"List all environments for a project. Provide EXACTLY ONE of project_name or project_id to identify the project (error if neither). Returns {\"environments\": [...]}; each item is an environment with fields including id (the environment UUID needed as environment_id for update_environment / delete_environment), name, branch, domain, custom_domain, is_production, is_preview, auto_deploy, memory_override_mb, auto_sleep_enabled, access_policy (email sharing: {enabled, emails} or null when the app is p","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_environments","displayName":"list_environments","title":"list_environments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_environment","description":"Create a new environment for a project. Required: name (lowercase alphanumeric with dashes, matching ^[a-z0-9][a-z0-9-]*$, 2-50 chars) and branch (the git branch to deploy, max 100 chars). Identify the project with EXACTLY ONE of project_name or project_id. Optional: env_vars (dict, stored encrypted), auto_deploy (default true). The environment domain is auto-generated, not an input. Returns the created environment as a flat dict including id (the new environment UUID for later update/delete), n","inputSchema":{"type":"object","required":["name","branch"],"properties":{"name":{"type":"string"},"branch":{"type":"string"},"env_vars":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"auto_deploy":{"type":"boolean","default":true},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"create_environment","displayName":"create_environment","title":"create_environment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_environment","description":"Delete a non-production environment and destroy its container.","inputSchema":{"type":"object","required":["environment_id"],"properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"type":"string"}}},"logicalName":"delete_environment","displayName":"delete_environment","title":"delete_environment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"deploy","description":"Trigger a new deployment. Pass exactly one of project_name OR project_id; environment_id is optional and defaults to the production environment. Returns the new deployment dict - read 'id' to track it and 'status', which starts at 'queued' (in progress). Then poll get_deployment(deployment_id=id) until status reaches a terminal value: 'live' (success - there is no 'success'), 'failed', or 'superseded'. Errors: a deployment already in progress for this environment is rejected (409); exceeding the","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"deploy","displayName":"deploy","title":"deploy","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_deployments","description":"List recent deployments for a project, newest first. Pass exactly one of project_name OR project_id; limit defaults to 20 (max 100). Returns {'deployments': [...], 'total': N}; index into 'deployments'. Each item has 'id', 'status' (in-progress: 'queued'; terminal: 'live', 'failed', or 'superseded'), 'trigger', 'commit_sha', 'created_at', and 'duration_seconds'.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_deployments","displayName":"list_deployments","title":"list_deployments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_deployment","description":"Get deployment details. Pass deployment_id (a UUID string); the deploy/rollback result's 'id' is also accepted as `id`.","inputSchema":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"deployment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_deployment","displayName":"get_deployment","title":"get_deployment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_deployment_logs","description":"Get a deployment's pipeline (build/deploy) logs, ordered by pipeline step. Pass deployment_id (a UUID string); the deploy result's 'id' is also accepted as `id`. Returns {'logs': [{'step': <pipeline step name>, 'message': <one log line>}, ...]}; step names are clone, analyze, build, push, deploy, health_check, application_check, cert, finalize. For raw Kaniko builder stderr use get_deployment_build_log; for live app stdout/stderr use get_logs.","inputSchema":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"deployment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_deployment_logs","displayName":"get_deployment_logs","title":"get_deployment_logs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rollback_deployment","description":"Roll back to a previous deployment by reusing its Docker image. Pass deployment_id - the UUID of the OLD deployment to restore (not the current live one); a deployment result's 'id' is also accepted as `id`. Returns a new deployment dict with trigger='rollback'; read 'id' and poll get_deployment until status is 'live' (success), 'failed', or 'superseded'. Requires a Pro or Team plan (free returns 403); fails with 400 if the target has no stored image. Rollback is instant when the image is still","inputSchema":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"deployment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"rollback_deployment","displayName":"rollback_deployment","title":"rollback_deployment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_logs","description":"Get application runtime logs (stdout/stderr) for a deployed app.","inputSchema":{"type":"object","properties":{"lines":{"type":"integer","default":200},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_logs","displayName":"get_logs","title":"get_logs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_stats","description":"Get container resource stats for a deployed app.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_stats","displayName":"get_stats","title":"get_stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_health","description":"Get container health info for a deployed app.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_health","displayName":"get_health","title":"get_health","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_addons","description":"List add-ons (Postgres/Redis databases and caches) attached to a project. Provide exactly one of project_name or project_id (mutually exclusive; one is required). Returns {addons, total}; each add-on has id, name, service_type ('postgres'|'redis'), version, status ('provisioning'|'running'|'error'), connection_url, env_var_name, port, created_at, updated_at. Use the returned id as addon_id for backup and add-on detail tools.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_addons","displayName":"list_addons","title":"list_addons","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_addon","description":"Provision a new add-on for a project. Requires a Pro or Team plan (Free returns 403). Required: name (lowercase slug, 2-50 chars), service_type ('postgres' or 'redis'), and exactly one of project_name or project_id (mutually exclusive). Optional: version (postgres: '16'|'15'|'14', default '16'; redis: '7'|'6', default '7') and env_var_name (defaults to DATABASE_URL for postgres, REDIS_URL for redis). Returns the add-on {id, name, service_type, version, status, connection_url, env_var_name, port,","inputSchema":{"type":"object","required":["name","service_type"],"properties":{"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"env_var_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"service_type":{"type":"string"}}},"logicalName":"create_addon","displayName":"create_addon","title":"create_addon","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_addon","description":"Destroy an add-on and its data. This is irreversible.","inputSchema":{"type":"object","required":["addon_id"],"properties":{"addon_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"delete_addon","displayName":"delete_addon","title":"delete_addon","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_backups","description":"List backups for an add-on (newest first, max 50). Required: addon_id (the add-on's id, from list_addons/get_addon), plus exactly one of project_name or project_id (mutually exclusive). Returns {backups, total}; each backup has id, status, storage_path, size_bytes, trigger ('auto'|'manual'), error, created_at, completed_at. status is one of 'pending'/'running'/'completed'/'failed' - 'pending' and 'running' are in-progress, the terminal success value is 'completed' (not 'success'/'done') and the","inputSchema":{"type":"object","required":["addon_id"],"properties":{"addon_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_backups","displayName":"list_backups","title":"list_backups","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_backup","description":"Trigger a manual backup for an add-on (postgres or redis). Requires a Pro or Team plan. Required: addon_id, plus exactly one of project_name or project_id (mutually exclusive). The backup runs asynchronously; this returns {message, addon, backup_id} where backup_id is the created backup row (initially status 'pending'). To track progress, poll list_backups and watch that backup's status reach the terminal value 'completed' (success) or 'failed'. Fails with 409 if a backup is already in progress,","inputSchema":{"type":"object","required":["addon_id"],"properties":{"addon_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"create_backup","displayName":"create_backup","title":"create_backup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"download_backup","description":"Get a download URL for a completed backup.","inputSchema":{"type":"object","required":["backup_id","addon_id"],"properties":{"addon_id":{"type":"string"},"backup_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"download_backup","displayName":"download_backup","title":"download_backup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_backup","description":"Delete a backup. This is irreversible.","inputSchema":{"type":"object","required":["backup_id","addon_id"],"properties":{"addon_id":{"type":"string"},"backup_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"delete_backup","displayName":"delete_backup","title":"delete_backup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_functions","description":"List your serverless functions (most recent first). Returns {\"functions\": [...], \"total\": <int>}; each item is a function record with name, display_name, runtime, status (active|deleted), pending_deploy, current_image_tag, last_deployed_at, url. env_vars are masked. `limit` caps how many come back.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20}}},"logicalName":"list_functions","displayName":"list_functions","title":"list_functions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_function","description":"Get a function's details. Provide exactly one of function_name or function_id (one is required, mutually exclusive). Key fields: status (active|deleted - NOT deploy progress), pending_deploy (True means handler_code/deps/env changed and the live container is stale - run deploy_function), current_image_tag and last_deployed_at (null until first deploy), runtime, auth_mode (public|api_key), url. env_vars and api_key are masked here; use get_function_env_vars or rotate_function_api_key for plaintex","inputSchema":{"type":"object","properties":{"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_function","displayName":"get_function","title":"get_function","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_function","description":"Create a serverless function. name: lowercase alphanumeric+dashes, globally unique (maps to a subdomain). runtime: one of python310|python311|python312|python313|node18|node20|node22|node24|bun1|deno2|ruby34|php84|babashka|go124 (bun1/deno2 take TypeScript handlers). auth_mode: public or api_key (api_key returns the full plaintext key ONCE in the response). env_vars keys cannot start with ORKESTR_ (reserved). idle_timeout_seconds: 10-3600 (default 60). NOTE: create does NOT deploy - the new func","inputSchema":{"type":"object","required":["name","display_name","runtime","handler_code"],"properties":{"name":{"type":"string"},"runtime":{"type":"string"},"env_vars":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null},"auth_mode":{"type":"string","default":"public"},"dependencies":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"display_name":{"type":"string"},"handler_code":{"type":"string"},"idle_timeout_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null}}},"logicalName":"create_function","displayName":"create_function","title":"create_function","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_function","description":"Delete a function and destroy its container. Irreversible.","inputSchema":{"type":"object","properties":{"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"delete_function","displayName":"delete_function","title":"delete_function","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"deploy_function","description":"Build and deploy a function from its current handler_code/dependencies. Provide exactly one of function_name or function_id (required, mutually exclusive). SYNCHRONOUS and blocking: returns the updated function record on success (pending_deploy=false, current_image_tag and last_deployed_at set) or raises an error (with stage/error/logs) on failure. Do NOT poll for a status - there is no deployment object and the record's status is just active|deleted. When called by an agent this is gated: it re","inputSchema":{"type":"object","properties":{"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"deploy_function","displayName":"deploy_function","title":"deploy_function","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_function_logs","description":"Get runtime logs from a function's container. Provide exactly one of function_name or function_id (required, mutually exclusive). lines: 1-1000 (default 200). Returns {\"logs\": <text>, \"deployed\": <bool>} - NOTE there is no `container` key (unlike get_logs). If never deployed, returns {\"logs\": \"\", \"deployed\": false}.","inputSchema":{"type":"object","properties":{"lines":{"type":"integer","default":200},"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_function_logs","displayName":"get_function_logs","title":"get_function_logs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"invoke_function","description":"Invoke a deployed function over HTTP. Provide exactly one of function_name or function_id (required, mutually exclusive). method/path/body/headers/query shape the request. Fails (400) if the function is not yet deployed (run deploy_function first). Returns {status_code, headers, body (text), content_type, duration_ms}. On a transport error it does NOT raise: it returns status_code=0 plus an `error` key - treat status_code 0 as a failed call, and a 2xx status_code as success. When called by an ag","inputSchema":{"type":"object","properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"path":{"type":"string","default":"/"},"query":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null},"method":{"type":"string","default":"POST"},"headers":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"default":null},"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"invoke_function","displayName":"invoke_function","title":"invoke_function","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_function_env_vars","description":"Return the decrypted environment variables for a function. Pass exactly one of function_name or function_id. Returns {\"env_vars\": {NAME: value, ...}} nested under the 'env_vars' key.","inputSchema":{"type":"object","properties":{"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_function_env_vars","displayName":"get_function_env_vars","title":"get_function_env_vars","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_function_metrics","description":"Function request metrics over a window. Provide exactly one of function_name or function_id (required, mutually exclusive). period: 5m|15m|1h|6h|24h (default 1h). Returns {period, total_requests, error_count, error_rate_percent, requests_per_minute (scalar avg rpm), avg_ms, p50_ms, p95_ms, p99_ms, waf_blocked, waf_rate_limited, timeseries (per-minute array of {timestamp,count,errors,waf_blocked,rate_limited})}.","inputSchema":{"type":"object","properties":{"period":{"type":"string","default":"1h"},"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_function_metrics","displayName":"get_function_metrics","title":"get_function_metrics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rotate_function_api_key","description":"Rotate the function's API key. Returns the new plaintext key once.","inputSchema":{"type":"object","properties":{"function_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"rotate_function_api_key","displayName":"rotate_function_api_key","title":"rotate_function_api_key","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_request_metrics","description":"Get request-level traffic metrics for a deployed app.","inputSchema":{"type":"object","properties":{"period":{"type":"string","default":"1h"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_request_metrics","displayName":"get_request_metrics","title":"get_request_metrics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_app_health","description":"Get the live app-health signal for a project's PRODUCTION app.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_app_health","displayName":"get_app_health","title":"get_app_health","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_deployment_stats","description":"Get aggregate deployment statistics for a whole project (not one deployment). Pass exactly one of project_name OR project_id; there is no deployment_id or environment_id argument. Returns {'total_deployments', 'successful' (count of 'live' + 'superseded'), 'failed', 'success_rate' (percent), 'avg_deploy_time_seconds' (null if none), 'last_deployment' (null, or {'status','trigger','created_at','commit_sha'})}. For a single deployment's detail use get_deployment.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_deployment_stats","displayName":"get_deployment_stats","title":"get_deployment_stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sleep_container","description":"Manually put a deployed app's container to sleep (it auto-wakes on the next inbound request).","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"sleep_container","displayName":"sleep_container","title":"sleep_container","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"wake_container","description":"Wake a sleeping deployed-app container.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"wake_container","displayName":"wake_container","title":"wake_container","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_project_env_vars","description":"Return the decrypted environment variables for a project. Pass exactly one of project_name or project_id. Returns {\"env_vars\": {NAME: value, ...}} - the variables are nested under the 'env_vars' key, not at the top level.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_project_env_vars","displayName":"get_project_env_vars","title":"get_project_env_vars","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_environment_env_vars","description":"Return the decrypted environment variables for one environment. Required: environment_id (the environment UUID) AND exactly one of project_name or project_id to scope the lookup. Returns {\"env_vars\": {NAME: value, ...}} nested under the 'env_vars' key.","inputSchema":{"type":"object","required":["environment_id"],"properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"environment_id":{"type":"string"}}},"logicalName":"get_environment_env_vars","displayName":"get_environment_env_vars","title":"get_environment_env_vars","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_project_webhook","description":"Get webhook / auto-deploy info for a project. Pass exactly one of project_name or project_id. Returns: webhook_url (relative path /api/webhooks/{provider}/{project_id}), provider (one of github, gitlab, bitbucket, codeberg - never null, defaults to github), and auto_deploy (bool: true if any environment has auto-deploy on git push enabled). There is no last-delivery field.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_project_webhook","displayName":"get_project_webhook","title":"get_project_webhook","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"toggle_project_webhook","description":"Enable or disable auto-deploy on git push for a project. Pass exactly one of project_name or project_id, and enable (bool, default true) to turn auto-deploy on/off across all the project's environments. Returns {\"auto_deploy\": <bool>} echoing the new state. When called by an agent this is gated: it returns a pending result and runs only after the owner approves.","inputSchema":{"type":"object","properties":{"enable":{"type":"boolean","default":true},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"toggle_project_webhook","displayName":"toggle_project_webhook","title":"toggle_project_webhook","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_deployment_build_log","description":"Get the full raw builder output (Kaniko stderr) for a deployment. Pass deployment_id (a UUID string); the deploy result's 'id' is also accepted as `id`. Returns {'build_log': <string or null>}; read the 'build_log' key. It is null when the build step never produced output. Most useful for diagnosing a 'failed' deployment whose error is in the build step.","inputSchema":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"deployment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_deployment_build_log","displayName":"get_deployment_build_log","title":"get_deployment_build_log","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_addon","description":"Get a single add-on, including its connection_url and credentials. Required: addon_id, plus exactly one of project_name or project_id (mutually exclusive). Returns the full add-on record: id, project_id, name, service_type ('postgres'|'redis'), version, status ('provisioning'|'running'|'error'), container_name, connection_url, env_var_name, port, node_id, group_id, credentials, auto_backup_enabled, created_at, updated_at.","inputSchema":{"type":"object","required":["addon_id"],"properties":{"addon_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_addon","displayName":"get_addon","title":"get_addon","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"toggle_addon_auto_backup","description":"Flip daily auto-backup on or off for an add-on (Pro/Team only; Free returns 403). This is a toggle - it inverts the current setting and takes no on/off argument. Required: addon_id, plus exactly one of project_name or project_id (mutually exclusive). Returns {auto_backup_enabled, addon}; read auto_backup_enabled for the resulting state. When called by an agent this is gated: it returns a pending result and runs only after the owner approves.","inputSchema":{"type":"object","required":["addon_id"],"properties":{"addon_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"toggle_addon_auto_backup","displayName":"toggle_addon_auto_backup","title":"toggle_addon_auto_backup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_addon_backup_info","description":"Get backup plan info for an add-on. Required: addon_id, plus exactly one of project_name or project_id (mutually exclusive). Returns {auto_backup_enabled, retention_days, max_manual_backups_per_day, manual_backups_used_today, plan}. max_manual_backups_per_day of -1 means unlimited; a value of 0 (and retention_days 0) means the plan has no backups. There is no scheduled-run field.","inputSchema":{"type":"object","required":["addon_id"],"properties":{"addon_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_addon_backup_info","displayName":"get_addon_backup_info","title":"get_addon_backup_info","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_domains","description":"List every custom domain you own, grouped by project. No params. Returns {domains: [...]}; each entry has project_name, env_name, is_production, default_domain, custom_domain (null if unset), dns_target, and status: 'active' (DNS verified, pointing to orkestr), 'pending' (custom_domain set but DNS not yet resolving), or 'no_domain' (no custom domain configured). When a custom_domain is set the entry also carries resolved_ips and cname.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_domains","displayName":"list_domains","title":"list_domains","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"verify_domain","description":"Re-check that a project's custom domain DNS points to orkestr.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"verify_domain","displayName":"verify_domain","title":"verify_domain","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_activity","description":"Recent audit-trail activity for the current user (and shared team actions). Optional limit (default 30, max 100) and actor (a worker id to show only that worker's actions, or \"user\" for human/token actions only). Returns {total, entries:[...]}; each entry has action, resource_type, resource_id, details, created_at (ISO), and actor{kind,id,label,role} where kind is 'worker'|'token'|'user'. action/resource_type are descriptive strings, not a fixed enum.","inputSchema":{"type":"object","properties":{"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"limit":{"type":"integer","default":30}}},"logicalName":"list_activity","displayName":"list_activity","title":"list_activity","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_workspace","description":"Orient yourself: one snapshot of the whole workspace. Optional workspace (\"personal\", a team uuid, or omit for everything you can access). Returns apps[] (each with environments[] and last_deployment), functions.total, sandboxes[], workers[], pending_approvals[] (what is blocked on a human right now), recent_activity[], plan{} and scope{}. Every list is capped and carries a `total` - page the specific endpoint (list_projects, list_sandboxes, ...) when you need the rest. START HERE instead of cal","inputSchema":{"type":"object","properties":{"workspace":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"get_workspace","displayName":"get_workspace","title":"get_workspace","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_dashboard_summary","description":"Dashboard snapshot for the current user. No params. Returns nested objects: projects{count,limit}, environments{count}, functions{count,limit}, plan{id,cpu,memory} where plan.id is 'free'/'pro'/'enterprise', plus recent_deployments[], recent_functions[], recent_activity[]. recent_deployments[].status uses the deployment enum (terminal: 'live'=succeeded, 'failed'; in-progress: 'pending'/'building'/'deploying'). Read projects.count and plan.id for counts/plan - there are no flat top-level count fi","inputSchema":{"type":"object","properties":{}},"logicalName":"get_dashboard_summary","displayName":"get_dashboard_summary","title":"get_dashboard_summary","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_registry_images","description":"List Docker images in the registry for one project. Pass exactly one of project_name or project_id (one is required). Returns {images:[...], project_name}; each image has tag, created_at, repository, is_live (true for the currently-deployed tag), and security_scan (cached scan dict or null). Use the tag value with scan_registry_image / delete_registry_image.","inputSchema":{"type":"object","properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"list_registry_images","displayName":"list_registry_images","title":"list_registry_images","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"scan_registry_image","description":"Run a vulnerability scan on one image tag and return the result synchronously (no polling). Required: tag (from list_registry_images[].tag) plus exactly one of project_name or project_id. Returns status='completed' with critical, high, total counts and findings[]; or status='skipped'/'error' with a reason when Trivy is unavailable or output is unparseable (non-fatal, do not retry). Note: status is 'completed', never 'success'.","inputSchema":{"type":"object","required":["tag"],"properties":{"tag":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"scan_registry_image","displayName":"scan_registry_image","title":"scan_registry_image","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_registry_image","description":"Delete an image tag from the registry. The currently-live tag is protected.","inputSchema":{"type":"object","required":["tag"],"properties":{"tag":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"delete_registry_image","displayName":"delete_registry_image","title":"delete_registry_image","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_notifications","description":"Return the 50 most recent notifications plus the unread tally. No params. Returns {notifications:[...], unread_count}; each notification has type ('cpu_high'|'memory_high'|'deploy_failed'|'incident'), title, message, project_id (nullable), is_read, created_at.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_notifications","displayName":"list_notifications","title":"list_notifications","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"mark_notifications_read","description":"Mark all of the current user's notifications as read (cannot target individual ones). No params. Returns {ok: true}.","inputSchema":{"type":"object","properties":{}},"logicalName":"mark_notifications_read","displayName":"mark_notifications_read","title":"mark_notifications_read","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_groups","description":"List your project groups (workspaces). No params. Returns {groups:[...], total}; each group has id (UUID), name, slug, description, network_name, project_count. Use the id (UUID), NOT the slug, as group_id for get_group / add_project_to_group / remove_project_from_group / delete_group.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_groups","displayName":"list_groups","title":"list_groups","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_group","description":"Get one project group plus its member projects. group_id must be the group's UUID id (from list_groups or create_group), NOT its slug. Returns the group fields (id, name, slug, description, network_name, project_count) plus projects[] (each with id, name, display_name, status, framework, domain).","inputSchema":{"type":"object","required":["group_id"],"properties":{"group_id":{"type":"string"}}},"logicalName":"get_group","displayName":"get_group","title":"get_group","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_group","description":"Create a project group (workspace). Required: name and slug (slug must be lowercase alphanumeric with dashes, ^[a-z0-9][a-z0-9-]*$); description optional. Pro/Team only - free tier returns 403. Returns the new group including its id (UUID); reuse that id (not the slug) as group_id for add_project_to_group / get_group / etc. When called by an agent this is gated: it returns a pending result and runs only after the owner approves.","inputSchema":{"type":"object","required":["name","slug"],"properties":{"name":{"type":"string"},"slug":{"type":"string"}}},"logicalName":"create_group","displayName":"create_group","title":"create_group","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_group","description":"Delete a project group. Projects are not deleted, just unassigned.","inputSchema":{"type":"object","required":["group_id"],"properties":{"group_id":{"type":"string"}}},"logicalName":"delete_group","displayName":"delete_group","title":"delete_group","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_project_to_group","description":"Assign a project to a group. group_id must be the group's UUID id (from list_groups/create_group), NOT its slug. Identify the project with exactly one of project_name or project_id (one required). Returns {status:'added'} or {status:'already_member'} (both success); a project already in a different group returns a 409 error. When called by an agent this is gated: it returns a pending result and runs only after the owner approves.","inputSchema":{"type":"object","required":["group_id"],"properties":{"group_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"add_project_to_group","displayName":"add_project_to_group","title":"add_project_to_group","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"remove_project_from_group","description":"Remove a project from a group. group_id must be the group's UUID id (from list_groups/get_group), NOT its slug. Identify the project with exactly one of project_name or project_id (one required). Returns {status:'removed'}; a project not currently in that group returns a 400 error. When called by an agent this is gated: it returns a pending result and runs only after the owner approves.","inputSchema":{"type":"object","required":["group_id"],"properties":{"group_id":{"type":"string"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"logicalName":"remove_project_from_group","displayName":"remove_project_from_group","title":"remove_project_from_group","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"remember","description":"Store one fact for your FUTURE runs. key: a short lowercase-hyphen handle you can reuse to revise or forget it (e.g. \"staging-db-host\"); value: the fact itself, max 400 chars. Re-using a key REVISES that memory instead of adding a second one - correct yourself rather than accumulating contradictions. Limit 25 memories; past that, forget() one first. Everything you remember is shown to you automatically at the start of every run, so there is no recall tool and no need to re-read it. Store conclus","inputSchema":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}},"logicalName":"remember","displayName":"remember","title":"remember","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"forget","description":"Drop one thing you remember, by its key. Use this when a memory has gone stale or wrong, or to make room when you are at the 25-memory limit. Returns {\"forgotten\": key, \"existed\": bool} - existed=false means there was no memory under that key, which is not an error.","inputSchema":{"type":"object","required":["key"],"properties":{"key":{"type":"string"}}},"logicalName":"forget","displayName":"forget","title":"forget","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_pending_action","description":"Check the status of a gated action you queued for human approval. A gated tool (e.g. deploy) returns {status:'pending', request_id} instead of running; poll this with that request_id. status is 'pending' (keep polling) until a human decides, then terminal 'approved' (with the original tool's output in result), 'denied', or 'expired'. The response also echoes tool (the gated tool name) and an error field if one was recorded.","inputSchema":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}},"logicalName":"get_pending_action","displayName":"get_pending_action","title":"get_pending_action","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delegate","description":"Delegate a focused sub-task to a subagent that runs in parallel with your other subagents. The subagent runs with YOUR exact role and permissions - same governance, it can do nothing you could not - and works the `objective` string you give it. Use this to fan out independent sub-tasks (e.g. investigate three services at once) instead of doing them one at a time.","inputSchema":{"type":"object","required":["objective"],"properties":{"tools":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"default":null},"objective":{"type":"string"}}},"logicalName":"delegate","displayName":"delegate","title":"delegate","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=orkestr&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkub3JrZXN0ci5ldS9hcGkvbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22orkestr%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.orkestr.eu%2Fapi%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22orkestr%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.orkestr.eu%2Fapi%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=orkestr&connectorUrl=https%3A%2F%2Fapi.orkestr.eu%2Fapi%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"orkestr\" --url \"https://api.orkestr.eu/api/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/orkestr-mcp-1424d92a0d","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/orkestr-mcp-1424d92a0d/tools/{tool}","mcpServerUrl":"https://api.orkestr.eu/api/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/orkestr-mcp-1424d92a0d?live=1"}