Skip to main content

Official MCP server

The official qbash MCP server gives any MCP client one URL for your qbash account:

https://mcp.qbash.com/mcp

Sign in with your qbash account and the client can list and run your tasks, read their results and logs, build new tasks with the task builder, and create, search and update memory folders. It suits anyone who wants qbash in Claude, ChatGPT, Codex, Cursor or Claude Code before they build a custom server.

Every tool runs as you, with your own permissions. A client sees the tasks you can run and the memory folders you can read, and changes only what you could change in qbash itself.

Connecting a client​

In qbash, open MCP Servers and choose Official qbash MCP server at the top of the list. Its page shows the setup for each client, with the URL filled in. In Claude Code, for example:

claude mcp add --transport http qbash https://mcp.qbash.com/mcp

Then run /mcp in Claude Code, select qbash and finish the sign-in in your browser. Codex uses codex mcp add qbash --url https://mcp.qbash.com/mcp followed by codex mcp login qbash.

If you belong to more than one organization, the sign-in connects to the one you last used in qbash. To switch, open the other organization in qbash and sign the client in again. The server's page in qbash also lists the apps signed in to it, so you can sign one out.

Building tasks from your client​

The Tasks tools include the same task builder as the task editor. build_task takes a description, or a SPEC.md contract with tests, and returns a session your client polls until the builder's turn ends. The task is created when the first turn ends, and each later turn saves its changes. revise_task continues work on an existing task the same way.

Before a task runs for real, run_tests runs its tests against a mocked SDK and preview_task runs it once with writes to connected systems blocked. run_task starts a production run, and get_task_result waits for it and returns the output. For a run that went wrong, get_task_log gives its numbered steps and errors, and get_task_log_steps reads a step's inputs and result.

With the builder, a request your client would otherwise repeat becomes a tested task, written once as code, that runs the same way every time from any client.

Connectors​

The official server lists connectors and their SDK operations, so a client can see what a task could use and look up exact signatures with describe_mode. It does not call connector operations itself.

When a client needs a connector you have not connected, request_connector returns a link to that connector's page in qbash, where you connect the account. To let a client call a connector's operations directly, add the account to a custom server.

Memory folders​

The Memories tools read, search and add documents in the folders you can access. memories_create_folder makes a new folder owned by you and private until you share it in qbash. It supports keyword search and exact lookups. Searching a folder by meaning is a setting you turn on in qbash, and memories_vector_search works on folders that have it.

When to build a custom server​

A custom server serves the tasks, connector accounts and memory folders you choose, under tool names and instructions you write, and you decide who in your organization can connect to it. Build one to give a team a fixed set of tools, to share a connector account without sharing its credentials, or to publish a task as a single tool.

Tool reference​

The list below covers every tool the official server serves and its parameters. Open a tool for an example call.

Tasks​

Find, run, build and test tasks you can access, read their runs and change their triggers.

list_tasksList tasks you can run, each with its latest run's status. Call read_task before reusing or revising one.
{
"name": "list_tasks",
"arguments": {}
}

Reads only. Clients that ask before calling tools can treat it as safe.

run_taskStart a production run of a task you may run. Returns execution_id for get_task_result, get_task_log and monitor_task_log.
{
"name": "run_task",
"arguments": {
"id_or_slug": "<id_or_slug>"
}
}
  • id_or_slugstringrequired

    Task UUID or exact task name.

  • inputsobject

Changes data in qbash, or starts work that does.

build_taskBuild a new task with the task builder from the task editor, starting from a description, or from a SPEC.md contract and tests. The task is created when the first turn ends, and each later turn saves its changes when it ends. Returns session_id. Call again with session_id to read progress, add message to continue, or pass answer to reply to a question. The result of a saved turn carries the task_id.
{
"name": "build_task",
"arguments": {}
}
  • answerobject

    Reply to the builder's open question: gate_id from the question, and value.

  • descriptionstring

    What the task should do.

  • messagestring

    Instructions for a new build, or a follow-up message for an existing session.

  • namestring

    Task name for a new build.

  • session_idstring

    Session id returned when the build started.

  • specstring

    SPEC.md contents.

  • task_idstring

    Optional. The id of the task this build created.

  • testsstring

    tests.py contents for a Python task.

  • wait_secondsinteger

    Seconds to wait for the run to finish before answering. Defaults to 45s. Pass 0 to check without waiting.

Changes data in qbash, or starts work that does.

get_task_resultGet the output of a task run. Pass task_id for its latest finished run, scheduled ones included, or execution_id for one run. With an execution_id from run_task, it waits for the run to finish before answering, so call it again right away while the run is still going. A long output comes in windows: pass output_offset for the next one. A run that failed answers with its error.
{
"name": "get_task_result",
"arguments": {}
}
  • execution_idstring

    Execution id of one run, such as one run_task returned.

  • output_offsetinteger

    Character offset into the output, for the next window of a long one.

  • task_idstring

    Task id, for its latest finished run.

  • wait_secondsinteger

    Seconds to wait for the run to finish before answering. Defaults to 45s. Pass 0 to check without waiting.

Reads only. Clients that ask before calling tools can treat it as safe.

get_task_logGet one task run's log: its status, revision, attempts, numbered step outline, errors and an output preview. Pass execution_id, or task_id and run for any recorded run. get_task_result has the full output, and get_task_log_steps the step details.
{
"name": "get_task_log",
"arguments": {}
}
  • attemptinteger

    Attempt number.

  • execution_idstring

    Execution id, such as one run_task returned.

  • runstring

    Execution id, latest or latest_failed. Defaults to latest.

  • task_idstring

    Task id for recorded history.

  • wait_secondsinteger

    Seconds to wait for the run to finish before answering. Defaults to 45s. Pass 0 to check without waiting.

Reads only. Clients that ask before calling tools can treat it as safe.

preview_taskRun the task once with writes to connected systems blocked. Returns job_id. Call again with task_id and job_id for the result.
{
"name": "preview_task",
"arguments": {
"task_id": "<task_id>"
}
}
  • task_idstringrequired

    Task id.

  • inputsobject
  • job_idstring

    Job id returned when the preview started.

  • wait_secondsinteger

    Seconds to wait for the run to finish before answering. Defaults to 45s. Pass 0 to check without waiting.

Changes data in qbash, or starts work that does.

search_tasksSearch tasks you can run by name or description.
{
"name": "search_tasks",
"arguments": {}
}
  • querystring

    Words from the task name or description.

Reads only. Clients that ask before calling tools can treat it as safe.

read_taskRead one task: its inputs, triggers, tests, latest run, the MCP servers that serve it, and (when you may edit it) its script and connector bindings.
{
"name": "read_task",
"arguments": {
"task_id": "<task_id>"
}
}
  • task_idstringrequired

    Task id.

Reads only. Clients that ask before calling tools can treat it as safe.

list_task_runsList recent runs, newest first, from any trigger, such as schedules and MCP calls. Pass task_id to list the runs of a task you can access. If you can only run that task, you see the runs you started. Without task_id, lists the runs of this server's own tasks, and tool narrows that to one of them. Test runs and previews are left out. Inputs are shown only for runs you started. For a run's result and steps, pass its task_id, and its execution_id as run, to get_task_log.
{
"name": "list_task_runs",
"arguments": {}
}
  • limitinteger

    Max results (default 10, max 50)

  • statusstring

    Only runs with this status

    One of queued, running, awaiting_retry, terminating, cancelled, stopped, success, error, timeout.

  • task_idstring

    A task id, such as one list_tasks returns. Required when this server serves no tasks.

  • toolstring

    One of this server's task tool names, to list only that task's runs

Reads only. Clients that ask before calling tools can treat it as safe.

get_task_log_stepsRead the steps of one task run: each step's inputs, results and errors, filtered and paged. Pass execution_id for a run started by run_task, or task_id and run. Use the # step numbers from get_task_log as from_order and to_order. Each listed step shows its id: pass that as step_id with field to read the step's full inputs or result a window at a time.
{
"name": "get_task_log_steps",
"arguments": {}
}
  • attemptinteger

    Attempt number.

  • execution_idstring

    Execution id returned by run_task.

  • fieldstring

    inputs or result.

  • from_orderinteger

    First step order.

  • limitinteger

    Maximum steps.

  • max_charsinteger

    Character limit.

  • offsetinteger

    Character offset.

  • runstring

    Execution id, latest or latest_failed. Defaults to latest.

  • searchstring

    Filter step content.

  • statusstring

    Filter by step status.

  • step_idstring

    Exact step id.

  • step_namestring

    Filter by step name.

  • task_idstring

    Task id for recorded history.

  • to_orderinteger

    Last step order.

Reads only. Clients that ask before calling tools can treat it as safe.

monitor_task_logRead new qbash.log lines while an authorized task execution is running.
{
"name": "monitor_task_log",
"arguments": {
"execution_id": "<execution_id>"
}
}
  • execution_idstringrequired

    Execution id.

  • afterinteger

    Number of lines already read.

Reads only. Clients that ask before calling tools can treat it as safe.

revise_taskChange an existing task with the task builder from the task editor: its script, inline prompts and scripts, inputs, settings and triggers. Use it for every schedule or webhook change, such as adding, moving, pausing or removing a schedule. Each turn saves its changes to the task when it ends. Returns session_id. Call again with task_id and session_id to read progress, add message to continue, or pass answer to reply to a question.
{
"name": "revise_task",
"arguments": {
"task_id": "<task_id>"
}
}
  • task_idstringrequired

    Task id.

  • answerobject

    Reply to the builder's open question: gate_id from the question, and value.

  • messagestring

    Requested changes, or a follow-up message.

  • session_idstring

    Session id returned when the revision started.

  • wait_secondsinteger

    Seconds to wait for the run to finish before answering. Defaults to 45s. Pass 0 to check without waiting.

Changes data in qbash, or starts work that does.

run_testsRun the task's tests with a mocked SDK. Returns job_id. Call again with task_id and job_id for the result.
{
"name": "run_tests",
"arguments": {
"task_id": "<task_id>"
}
}
  • task_idstringrequired

    Task id.

  • job_idstring

    Job id returned when the tests started.

  • wait_secondsinteger

    Seconds to wait for the run to finish before answering. Defaults to 45s. Pass 0 to check without waiting.

Changes data in qbash, or starts work that does.

Connectors​

Find connectors and accounts, look up their SDK operations and add an account to a server.

list_connectorsList connectors and whether each is connected for you. Connected ones come first, with your accounts. Without query or status, connectors you have not connected are listed by id only. Then call describe_mode with a provider for its SDK modes, or request_connector for one that is not connected.
{
"name": "list_connectors",
"arguments": {}
}
  • include_actionsboolean

    Include each account's action names. Off by default.

  • querystring

    Connector or account name to match.

  • statusstring

    Only connectors with this status.

    One of connected, needs_reconnection, not_connected.

Reads only. Clients that ask before calling tools can treat it as safe.

request_connectorAsk the person to connect a connector, such as Reddit, when list_connectors shows it not_connected, or connected but not on this server. Returns a link that opens the connector's connect form in qbash, and the steps to use it from an MCP server in their client. Connector tools do not run on this server until the account is added to it. Only the person can connect it, in qbash, so never ask them for keys or passwords.
{
"name": "request_connector",
"arguments": {
"provider": "<provider>"
}
}
  • providerstringrequired

    Connector provider id or name, as list_connectors returns it, such as reddit.

  • clientstring

    The MCP client you are running in, so the steps fit it. Leave it out only when you cannot tell: the result then says client_needed, and you ask the person.

    One of claude-code, codex, cursor, vscode, claude-ai, chatgpt, grok-bot, other.

Reads only. Clients that ask before calling tools can treat it as safe.

search_sdkSearch SDK documentation for functions and connector operations.
{
"name": "search_sdk",
"arguments": {
"query": "<query>"
}
}
  • querystringrequired

    SDK operation or capability to find.

Reads only. Clients that ask before calling tools can treat it as safe.

describe_modeDescribe connector operations, their arguments and results.
{
"name": "describe_mode",
"arguments": {
"provider": "<provider>"
}
}
  • providerstringrequired

    Connector provider id.

  • modestring

    Optional mode id.

Reads only. Clients that ask before calling tools can treat it as safe.

Memories​

Find memory folders you can access and read, search or update their contents.

list_memory_foldersList memory folders you can access and whether you can write to them.
{
"name": "list_memory_folders",
"arguments": {}
}
  • querystring

    Optional words from the folder name.

Reads only. Clients that ask before calling tools can treat it as safe.

memories_create_folderCreate a memory folder owned by you, private to you until you share it in qbash. It holds documents for keyword search and exact lookups. Searching by meaning is turned on in qbash, not here.
{
"name": "memories_create_folder",
"arguments": {
"name": "<name>"
}
}
  • namestringrequired

    Folder name.

  • descriptionstring

    Optional. What the folder is for.

Changes data in qbash, or starts work that does.

memories_getRun qbash.memories.get against a folder.
{
"name": "memories_get",
"arguments": {
"name": "<name>"
}
}
  • namestringrequired

    Exact document name.

  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

Reads only. Clients that ask before calling tools can treat it as safe.

memories_queryRun qbash.memories.query with exact name and metadata filters.
{
"name": "memories_query",
"arguments": {}
}
  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

  • metadataobject
  • namestring

    Optional exact document name.

Reads only. Clients that ask before calling tools can treat it as safe.

memories_list_allRun qbash.memories.list_all for a folder.
{
"name": "memories_list_all",
"arguments": {}
}
  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

Reads only. Clients that ask before calling tools can treat it as safe.

memories_createCreate a Markdown document in a memory folder you can write to (qbash.memories.store).
{
"name": "memories_create",
"arguments": {
"name": "<name>"
}
}
  • namestringrequired

    Document name.

  • contentstring

    Markdown body. Pass content or file.

  • fileobject

    Authorized qbash file reference.

  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

  • metadataobject

Changes data in qbash, or starts work that does.

memories_updateRun qbash.memories.update on an existing document.
{
"name": "memories_update",
"arguments": {
"content": "<content>",
"memory_id": "<memory_id>"
}
}
  • contentstringrequired

    New content.

  • memory_idstringrequired

    Document id.

  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

  • mergeboolean
  • metadataobject

Changes data in qbash, or starts work that does.

memories_archiveRun qbash.memories.archive.
{
"name": "memories_archive",
"arguments": {
"memory_id": "<memory_id>"
}
}
  • memory_idstringrequired

    Document id.

  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

Changes data in qbash, or starts work that does.

memories_unarchiveRun qbash.memories.unarchive.
{
"name": "memories_unarchive",
"arguments": {
"memory_id": "<memory_id>"
}
}
  • memory_idstringrequired

    Document id.

  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

Changes data in qbash, or starts work that does.

memories_get_propositionsRun qbash.memories.get_propositions.
{
"name": "memories_get_propositions",
"arguments": {
"memory_id": "<memory_id>"
}
}
  • memory_idstringrequired

    Document id.

  • folderstring

    Exact memory folder name. Pass this or folder_id.

  • folder_idstring

    Memory folder UUID. Pass this or folder.

Reads only. Clients that ask before calling tools can treat it as safe.