The Stack.ai MCP connector routes your AI agent's tool calls to Stack.ai's own MCP server through Scalekit. Each user signs in to Stack.ai once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 32 tools.
- Tools
- 32
- What they doRead · write · destructive
- 20 · 7 · 520 read7 write5 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
What you can do
- Build AI projects: create and edit projects from a plain-language description, import workflows, and validate them
- Run projects: execute published projects with inputs and review run history and per-step traces
- Search knowledge bases: list knowledge bases and pull the most relevant chunks for a query
- Manage skills: create, update, validate, and roll back skills and browse their version history
- Upload files: upload files for use as project inputs and get signed links to them
- Review audit logs: list who did what and when across the organization
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Stack.ai MCP connection
In AgentKit > Connections, create a Stack.ai MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Stack.ai MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'stackaimcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Stack.ai MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'stackaimcp_whoami',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "stackaimcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Stack.ai MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="stackaimcp_whoami",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolstackaimcp_audit_logs_listList the active Stack AI organization's audit trail (who did what, when), with optional filters and pagination.Read-onlyAudit Logs List
List the active Stack AI organization's audit trail (who did what, when), with optional filters and pagination.
Inputs
actionstring- Filter by action verb (e.g. "export", "delete", "update", "run").
cursorstring- Opaque pagination cursor from a previous response's pagination.next_cursor.
date_fromstring- ISO-8601 lower bound (inclusive) on created_at.
date_tostring- ISO-8601 upper bound (inclusive) on created_at.
decisionstring- Filter by decision ("allow" / "deny").
page_sizestring- Maximum entries per page (clamped to 200).
permission_keystring- Filter by permission key (e.g. "org.members.remove").
resource_typestring- Filter by resource type (e.g. "projects").
searchstring- Free-text search across the entry.
user_idstring- Filter to a single acting member's id.
stackaimcp_get_projectRetrieve a project's node and edge graph as a paginated, self-contained subgraph with connectivity preserved across pages.Read-onlyGet Project
Retrieve a project's node and edge graph as a paginated, self-contained subgraph with connectivity preserved across pages.
Inputs
project_idstringrequired- Project ID (from ``projects_list``).
cursorstring- Opaque pagination token from a prior response's ``pagination.next_cursor``. Pass ``null`` to fetch the first page.
page_sizestring- Maximum nodes per page. Defaults to 50, clamped to [1, 200].
verbosestring- When true, also include the raw upstream ``flow`` object verbatim. Off by default to avoid duplicating graph data. Refused with a structured ``flow_too_large`` error (carrying ``next_action`` and node/edge counts) when ``nodes + edges`` exceeds the server's ``max_inline_flow_elements`` cap; in that case page through the flow using ``next_cursor`` instead.
versionstring- ``"published"`` (default — falls back to draft if none) or ``"draft"`` to read the draft directly.
stackaimcp_get_project_correctionsRe-validate a project draft and return paginated correction entries for params cleaned up during creation or editing.Read-onlyGet Project Corrections
Re-validate a project draft and return paginated correction entries for params cleaned up during creation or editing.
Inputs
project_idstringrequired- Project ID to re-validate.
cursorstring- Opaque pagination cursor from a prior response.
page_sizestring- Maximum corrections per page (clamped to 200).
stackaimcp_get_runFetch the per-node execution trace for a project run, filtered by severity and optionally expanded with inputs and outputs.Read-onlyGet Run
Fetch the per-node execution trace for a project run, filtered by severity and optionally expanded with inputs and outputs.
Inputs
project_idstringrequired- Project (flow) ID the run belongs to.
run_idstringrequired- Run ID to fetch.
cursorstring- Opaque pagination cursor from a previous response's ``pagination.next_cursor``.
expandstring- Optional list of node ids whose ``inputs`` / ``outputs`` should be populated. Up to 50 ids per call. Ids not in the current page are surfaced in the summary.
page_sizestring- Maximum nodes per page (clamped to 200).
severity_filterstring- Which nodes to return: ``"failed_or_slow"`` (default), ``"failed"``, ``"slow"``, or ``"all"``.
verbosestring- When true, include every node-in-page's inputs/outputs. Use ``expand`` for finer grain.
stackaimcp_list_connectionsList the OAuth and API-key connections the authenticated user has configured in Stack AI.Read-onlyList Connections
List the OAuth and API-key connections the authenticated user has configured in Stack AI.
Inputs
cursorstring- Opaque pagination cursor from a previous response's ``pagination.next_cursor``.
page_sizestring- Maximum connections per page (clamped to 200).
provider_idstring- Optional filter, e.g. ``"gmail"``, ``"slack"``. Pass null for all.
stackaimcp_list_knowledge_basesList knowledge bases available to the authenticated user, with optional verbose metadata.Read-onlyList Knowledge Bases
List knowledge bases available to the authenticated user, with optional verbose metadata.
Inputs
cursorstring- Pagination cursor from a previous response.
page_sizestring- Maximum results per page (clamped to 200).
verbosestring- When true, return the full KB metadata for each row instead of the compact projection.
stackaimcp_list_projectsFetch a paginated list of projects accessible to the authenticated account.Read-onlyList Projects
Fetch a paginated list of projects accessible to the authenticated account.
Inputs
cursorstring- Opaque pagination cursor from a previous response. Pass ``null`` to fetch the first page.
owned_onlystring- When true, only return projects the user owns.
page_sizestring- Maximum number of projects per page. Defaults to 50, clamped to [1, 200].
stackaimcp_list_providers_actionsList available Stack AI integration providers and their actions, with optional full schemas for specific action IDs.Read-onlyList Providers Actions
List available Stack AI integration providers and their actions, with optional full schemas for specific action IDs.
Inputs
expandstring- optional list of action / trigger ids to drill into; only valid with a single ``provider_id`` string.
include_deprecatedstring- When true, surface deprecated providers / actions / triggers instead of filtering them. Off by default.
provider_idstring- ``null``, a single id (e.g. ``"gmail"``), or a list (e.g. ``["gmail", "slack"]``).
stackaimcp_list_triggersList the cron, polling, and webhook triggers configured on a specific project.Read-onlyList Triggers
List the cron, polling, and webhook triggers configured on a specific project.
Inputs
project_idstringrequired- Project (flow) ID to inspect.
verbosestring- When true, return the full trigger metadata instead of the compact projection.
stackaimcp_projects_validate_flow_jsonRun Stack AI's pre-flight validators against a raw flow JSON payload without saving it as a project.Read-onlyProjects Validate Flow Json
Run Stack AI's pre-flight validators against a raw flow JSON payload without saving it as a project.
Inputs
flow_jsonobjectrequired- Object with nodes and edges arrays, in the shape returned by projects_get.
cursorstring- Opaque pagination cursor from a prior response.
page_sizestring- Maximum findings per page (clamped to 200).
severity_filterstring- "all" (default) or "errors_only".
stackaimcp_runs_listList a Stack AI project's run history, paginated.Read-onlyRuns List
List a Stack AI project's run history, paginated.
Inputs
project_idstringrequired- Project id whose runs to list.
cursorstring- Opaque pagination cursor from a previous response.
page_sizestring- Maximum rows per page. Defaults to 25, clamped to [1, 200].
stackaimcp_search_kbSearch a Stack AI knowledge base and return the top matching chunks ranked by relevance.Read-onlySearch Kb
Search a Stack AI knowledge base and return the top matching chunks ranked by relevance.
Inputs
kb_idstringrequired- Knowledge base ID to search.
querystringrequired- Natural-language search query (must be non-empty).
expandstring- Optional list of ``chunk_id`` values whose full ``text`` should be populated in the response. Other chunks still come back with preview only. Up to 20 ids per call; ids that don't match any chunk in the current result set are surfaced in the summary.
query_strategystring- Retrieval mode: ``"semantic"`` (embedding similarity, default), ``"keyword"`` (BM25), or ``"hybrid"`` (rerank of both).
top_kstring- Maximum chunks to return. Defaults to 5, clamped to [1, 20] (the upstream cap).
stackaimcp_server_infoReturn the Stack AI MCP server's version, mode, and capability flags.Read-onlyServer Info
Return the Stack AI MCP server's version, mode, and capability flags.
Inputs
This tool takes no inputs.
stackaimcp_skills_getFetch one Stack AI skill's full detail: instructions, frontmatter, actions, and file manifest.Read-onlySkills Get
Fetch one Stack AI skill's full detail: instructions, frontmatter, actions, and file manifest.
Inputs
skill_idstringrequired- The skill id (from skills_list).
stackaimcp_skills_listList the Stack AI skills visible to the authenticated user, builtins first.Read-onlySkills List
List the Stack AI skills visible to the authenticated user, builtins first.
Inputs
cursorstring- Opaque pagination cursor from a previous response's pagination.next_cursor. Pass null to fetch the first page.
page_sizestring- Maximum skills per page. Defaults to 25, clamped to [1, 100].
stackaimcp_skills_validateValidate a proposed Stack AI skill bundle offline and preview the normalization the write tools would apply.Read-onlySkills Validate
Validate a proposed Stack AI skill bundle offline and preview the normalization the write tools would apply.
Inputs
filesarrayrequired- The file bundle: a list of ``{ path, content_base64 }`` objects. ``path`` is the relative POSIX path inside the bundle; a root ``SKILL.md`` (exact case) is required.
actionsstring- Optional provider_id.action_id refs to check (format only) and merge into the normalization preview.
stackaimcp_skills_version_getFetch one historical version of a Stack AI skill's full detail: instructions, frontmatter, actions, and file manifest.Read-onlySkills Version Get
Fetch one historical version of a Stack AI skill's full detail: instructions, frontmatter, actions, and file manifest.
Inputs
skill_idstringrequired- The skill id (from skills_list).
versionintegerrequired- The version number to fetch (1-based, from skills_versions_list).
stackaimcp_skills_versions_listList a Stack AI skill's full version history, newest first.Read-onlySkills Versions List
List a Stack AI skill's full version history, newest first.
Inputs
skill_idstringrequired- The skill id (from skills_list).
stackaimcp_validate_workflowRun pre-flight validation checks on a project draft and return paginated errors and warnings with stable codes and fix hints.Read-onlyValidate Workflow
Run pre-flight validation checks on a project draft and return paginated errors and warnings with stable codes and fix hints.
Inputs
project_idstringrequired- Project ID to validate. The validator always reads the draft, not the published version.
cursorstring- Opaque pagination cursor from a prior response.
page_sizestring- Maximum findings per page (clamped to 200).
severity_filterstring- ``"all"`` (default) returns errors AND warnings; ``"errors_only"`` drops warnings so an LLM checking "can I run this?" doesn't have to wade through nice-to-haves.
stackaimcp_whoamiReturn the authenticated user's profile, active organization, plan, and paginated list of all organizations.Read-onlyWhoami
Return the authenticated user's profile, active organization, plan, and paginated list of all organizations.
Inputs
cursorstring- Opaque pagination cursor from a previous response's ``pagination.next_cursor``. Pass null to start.
page_sizestring- Maximum orgs per page. Defaults to 50, clamped to [1, 200].
stackaimcp_create_projectCreate a new Stack AI project from a natural-language description by generating its nodes and edges with AI assistance.WriteCreate Project
Create a new Stack AI project from a natural-language description by generating its nodes and edges with AI assistance.
Inputs
descriptionstringrequired- High-level description of what the project should do.
stackaimcp_files_create_upload_urlRequest a presigned PUT URL from Stack AI so the client can upload a large file out of band.WriteFiles Create Upload Url
Request a presigned PUT URL from Stack AI so the client can upload a large file out of band.
- Idempotent
Inputs
byte_lengthintegerrequired- Exact byte count of the file (1..104857600).
content_hashstringrequired- Base64-encoded SHA-256 of the file's bytes (44 characters, ending in "=").
filenamestringrequired- Display name (e.g. invoice.pdf).
mime_typestring- Optional Content-Type hint. Defaults to Stack AI's inference from the filename when omitted.
purposestring- Storage bucket. Defaults to "user-documents".
stackaimcp_files_finalize_uploadFinalize a presigned Stack AI file upload and return a projects_run-ready signed URL.WriteFiles Finalize Upload
Finalize a presigned Stack AI file upload and return a projects_run-ready signed URL.
- Idempotent
Inputs
file_idstringrequired- The file_id returned by files_create_upload_url.
stackaimcp_files_uploadUpload a file inline as base64 to Stack AI and return a signed URL usable in project inputs.WriteFiles Upload
Upload a file inline as base64 to Stack AI and return a signed URL usable in project inputs.
Inputs
content_base64stringrequired- Standard-alphabet base64 of the bytes.
filenamestringrequired- Display name (e.g. invoice.pdf). Used for Content-Disposition and the storage key.
mime_typestring- Optional Content-Type hint. Defaults to application/octet-stream.
purposestring- Storage bucket. Defaults to "user-documents", which is what projects_run doc-* inputs expect.
stackaimcp_projects_importCreate a new draft Stack AI project from an exported workflow JSON.WriteProjects Import
Create a new draft Stack AI project from an exported workflow JSON.
Inputs
workflow_jsonobjectrequired- Parsed export object. Must be JSON-safe. Pass the parsed body, not a string blob.
folder_idstring- Optional folder where the new project should land. Null lets Stack AI pick the default.
project_namestring- Optional name for the new project. When omitted, the name embedded in the export is used.
stackaimcp_skills_createCreate a new Stack AI skill (version 1) from text fields or a file bundle.WriteSkills Create
Create a new Stack AI skill (version 1) from text fields or a file bundle.
Inputs
actionsstring- Optional action refs the skill may invoke, each provider_id.action_id. Pass null for none.
descriptionstring- A one-line description of when to use the skill (text mode only).
filesstring- Optional file bundle (file mode): a list of ``{ path, content_base64 }`` objects with a root ``SKILL.md``.
instructionsstring- The SKILL.md body, markdown (text mode only).
namestring- The skill name, unique within the org (text mode only).
stackaimcp_switch_orgSet the active organization for the current session, routing all subsequent org-scoped tools to that org.WriteSwitch Org
Set the active organization for the current session, routing all subsequent org-scoped tools to that org.
- Idempotent
Inputs
org_idstringrequired- The Stack AI organization id to activate. Find valid ids by calling ``whoami``.
stackaimcp_edit_projectEdit an existing Stack AI project using a natural-language description or a structured patch of node and edge operations.DestructiveEdit Project
Edit an existing Stack AI project using a natural-language description or a structured patch of node and edge operations.
Inputs
project_idstringrequired- No description.
descriptionstring- No description.
direct_patchstring- No description.
dry_runstring- Pass true together with ``direct_patch`` to validate the patch without saving. Shows projected node/edge counts and delta; ``published`` is always false for a dry run.
publishstring- No description.
stackaimcp_projects_edit_uiPatch a Stack AI project's UI options (theme, welcome message, allowed origins, etc.) without modifying its flow graph.DestructiveProjects Edit Ui
Patch a Stack AI project's UI options (theme, welcome message, allowed origins, etc.) without modifying its flow graph.
- Idempotent
Inputs
project_idstringrequired- Project id whose UI options to update.
updatesobjectrequired- Object of UI option fields to merge. At least one key required. Unknown keys raise an error with the list of bad keys.
publishstring- Publish the new draft on success. Defaults to false.
stackaimcp_run_projectExecute a published Stack AI project by supplying a key-value inputs map that matches the flow's declared input schema.DestructiveRun Project
Execute a published Stack AI project by supplying a key-value inputs map that matches the flow's declared input schema.
Inputs
inputsobjectrequired- No description.
project_idstringrequired- No description.
verbosestring- No description.
versionstring- No description.
stackaimcp_skills_rollbackRestore a prior version of a Stack AI skill's content by publishing it as a new latest version.DestructiveSkills Rollback
Restore a prior version of a Stack AI skill's content by publishing it as a new latest version.
Inputs
skill_idstringrequired- The skill id to roll back (from skills_list).
versionintegerrequired- The historical version whose content to restore (1-based, from skills_versions_list). It must not be the current latest version.
stackaimcp_skills_updatePublish a new version of a Stack AI skill as a full replacement, from text fields or a file bundle.DestructiveSkills Update
Publish a new version of a Stack AI skill as a full replacement, from text fields or a file bundle.
Inputs
skill_idstringrequired- The skill id to update (from skills_list).
actionsstring- The full replacement list of provider_id.action_id refs. Pass null for none - this clears any existing refs, so re-send the current list to keep them.
descriptionstring- The full replacement description (text mode only).
filesstring- Optional file bundle (file mode): a list of ``{ path, content_base64 }`` objects with a root ``SKILL.md``.
instructionsstring- The full replacement SKILL.md body, markdown (text mode only).
namestring- The skill name (text mode only) - re-send the current one unless you rename it.
No tools match.