Skip to content

Mission Squad MCP Server

The Mission Squad MCP server (@missionsquad/mcp-msq) exposes the MissionSquad API to AI agents as Model Context Protocol tools. With it, an agent can manage providers, models, agents, workflows, factories, schedules, collections, vector stores, and files — and run chat completions and embeddings — using a single MissionSquad API key.

  • Hosted endpoint: https://mcp.missionsquad.ai — use the remote server without installing anything.
  • Local: run it over stdio with npx -y @missionsquad/mcp-msq.
  • Auth: your MissionSquad API key (msq-...). The server forwards it to the API as the x-api-key header.
  • Tools: 76 tools, all prefixed msq_, returning pretty-printed JSON.

Every tool call ultimately hits the MissionSquad REST API documented in the API reference — the MCP server is a thin, typed wrapper, so the request/response shapes match the corresponding REST endpoints.

Connecting

Hosted (remote)

Point your MCP client at https://mcp.missionsquad.ai and authenticate with your MissionSquad API key. The server resolves the key from a per-call hidden argument named apiKey — a FastMCP feature where arguments not declared in a tool's schema are passed through to the server but never shown to the model. In practice you supply apiKey alongside each tools/call request; clients that support hidden/passthrough arguments inject it for you. You can also pass an optional baseUrl hidden argument to target a self-hosted MissionSquad API.

jsonc
// A tools/call request carries the hidden apiKey (and optional baseUrl) in `arguments`.
// These keys are not part of any tool's published schema, so the model never sees them.
{
  "method": "tools/call",
  "params": {
    "name": "msq_list_models",
    "arguments": {
      "apiKey": "msq-************************",
      "baseUrl": "https://agents.missionsquad.ai/v1"   // optional
    }
  }
}

The hosted server is in active rollout. If https://mcp.missionsquad.ai is not yet reachable for your account, use the local stdio install below — it is functionally identical.

Local (stdio)

Run the published package directly. It speaks the MCP stdio transport, which every MCP client supports.

jsonc
{
  "mcpServers": {
    "mission-squad": {
      "command": "npx",
      "args": ["-y", "@missionsquad/mcp-msq"],
      "env": {
        "MSQ_API_KEY": "msq-************************",
        "MSQ_BASE_URL": "https://agents.missionsquad.ai/v1"
      }
    }
  }
}

Configuration

SettingWherePurpose
API keyenv MSQ_API_KEY, or hidden arg apiKeyAuthenticates to the MissionSquad API (sent as x-api-key). The hidden arg takes precedence over the env var. Required.
Base URLenv MSQ_BASE_URL, or hidden arg baseUrlUpstream MissionSquad API base (default https://agents.missionsquad.ai/v1). Must end in /v1.
MSQ_HTTP_TIMEOUT_MSenvPer-request timeout for non-streaming calls (default 120000).
MSQ_DEFAULT_FILE_CONTENT_MAX_BYTESenvDefault cap on bytes returned by msq_get_file_content (default 1048576).
LOG_LEVELenvdebug / info / warn / error (logs go to stderr).

If no API key resolves, every tool fails with: "MissionSquad API key is required. Provide hidden argument 'apiKey' or set MSQ_API_KEY."

Tool reference

All tools are prefixed msq_. Tools marked (no params) take only the hidden apiKey/baseUrl. Parameters below are the declared input schema; see the linked REST page for full response shapes.

Models & providers

ToolParamsREST
msq_list_models(no params)GET /v1/models
msq_get_model_map(no params)GET /v1/modelmap
msq_list_providers(no params)GET /v1/core/providers
msq_add_providerproviderKey, apiKey?, url?POST /v1/core/add/provider
msq_delete_providerproviderKeyPOST /v1/core/delete/provider
msq_discover_provider_modelsproviderKey, url?, apiKey?POST /v1/core/models
msq_add_modelname, description, providerKey, model, testResponse?, getAllApiModels?, extractEmbeddingModels?POST /v1/core/add/model
msq_delete_modelmodelIdPOST /v1/core/delete/model

Note: in msq_add_provider/msq_discover_provider_models, the apiKey parameter is the provider's key sent in the request body — distinct from the hidden apiKey used to authenticate to MissionSquad.

Chat & embeddings

ToolParamsREST
msq_chat_completionsmodel, messages[], temperature?, max_tokens?, top_p?, n?, stop?, tools?, tool_choice?, stream?, xClientId?, xSessionId? (+ passthrough)POST /v1/chat/completions
msq_embeddingsmodel, input (string or string[])POST /v1/embeddings

msq_chat_completions always streams upstream and reassembles the full response; xClientId/ xSessionId are sent as the x-client-id/x-session-id headers.

Agents

ToolParamsREST
msq_list_agents(no params)GET /v1/core/agents
msq_add_agentname, description, systemPrompt? or systemPromptId?, model, overwrite?, addToday?, timezoneOffset?, tools?, selectedFunctions?, modelOptions?POST /v1/core/add/agent
msq_update_agentname, description?, systemPrompt?/systemPromptId?, model?, addToday?, timezoneOffset?, tools?, selectedFunctions?, modelOptions?, combineSystemPrompts?, convertSystemPrompt?PUT /v1/core/update/agent
msq_delete_agentnamePOST /v1/core/delete/agent
msq_publish_agentagentId, agentNamePOST /v1/core/agents/publish
msq_generate_promptmodel, messages[], name?, description?, type?, modelOptions?POST /v1/core/generate/prompt

msq_add_agent exactly one of systemPrompt or systemPromptId is required; for long prompts call msq_generate_prompt first and pass the returned systemPromptId. msq_add_agent also auto-publishes the agent.

Workflows

ToolParamsREST
msq_list_workflows(no params)GET /v1/core/workflows
msq_get_workflowidGET /v1/core/workflows (filtered)
msq_create_workflowid?, name?, mainAgentRef?, mainAgentId?, mainPrompt?, dataPayload?, concurrency?, delimiter?, failureMessage?, failureInstruction?POST /v1/core/workflows
msq_update_workflowid + workflow fieldsPUT /v1/core/workflows/:id
msq_run_workflowworkflowId, dataPayload?POST /v1/core/workflow-runs
msq_get_workflow_run_statusrunIdGET /v1/core/workflow-runs/:runId
msq_get_workflow_resultrunIdGET /v1/core/workflow-runs/:runId/hydrated

Factories

ToolParamsREST
msq_list_factories(no params)GET /v1/core/factories
msq_get_factoryidGET /v1/core/factories/:id
msq_create_factoryid?, name, description?, steps[], continuous?, limitTotalInvocations?, maxTotalInvocations?POST /v1/core/factories
msq_update_factoryid + factory fields (partial)PUT /v1/core/factories/:id
msq_delete_factoryidDELETE /v1/core/factories/:id
msq_list_factory_runsfactoryId, limit?, offset?GET /v1/core/factories/:id/runs
msq_run_factoryfactoryConfigId, initialCarryPayload?POST /v1/core/factory-runs
msq_get_factory_run_statusrunIdGET /v1/core/factory-runs/:runId
msq_get_factory_resultrunIdGET /v1/core/factory-runs/:runId
msq_list_factory_run_stepsrunId, limit?, offset?GET /v1/core/factory-runs/:runId/steps
msq_get_factory_run_steprunId, stepRunIdGET …/steps/:stepRunId
msq_get_factory_run_step_hydratedrunId, stepRunIdGET …/steps/:stepRunId/hydrated
msq_pause_factory_runrunIdPOST …/pause
msq_resume_factory_runrunIdPOST …/resume
msq_cancel_factory_runrunIdPOST …/cancel

Factory schedules

ToolParams
msq_list_factory_schedules(no params)
msq_create_factory_schedulefactoryConfigId, timesToRun[], label?, startDate?, repeatInterval?, daysOfWeek?, dayOfMonth?, status?, initialCarryPayload?
msq_update_factory_scheduleid + schedule fields (partial)
msq_delete_factory_scheduleid
msq_toggle_factory_scheduleid

Config, tools & servers

ToolParamsREST
msq_get_core_config(no params)GET /v1/core/config
msq_get_core_config_summary(no params)GET /v1/core/config (summarized + redacted)
msq_scrape_urlurlPOST /v1/core/scrape-url
msq_list_tools(no params)GET /v1/core/tools
msq_list_tool_functions(no params)GET /v1/core/tools (summarized)
msq_list_servers(no params)GET /v1/core/servers
msq_list_server_toolsserverNameGET /v1/mcp/servers/:name/tools
msq_get_user_settings(no params)GET /v1/core/user/settings

Local collections

ToolParams
msq_list_core_collections(no params)
msq_search_core_collectioncollectionName, query, embeddingModelName, topK?
msq_get_core_collection_diagnosticscollectionName
msq_recover_core_collectioncollectionName, strategy?, force?

Vector stores & files

ToolParamsREST
msq_list_vector_stores(no params)GET /v1/vector_stores
msq_create_vector_storename, file_ids?, chunking_strategy?, metadata?, embeddingModelName?, enhancePDF?, sseSessionId?, batchSize?POST /v1/vector_stores
msq_get_vector_storevectorStoreIdGET /v1/vector_stores/:id
msq_delete_vector_storevectorStoreIdDELETE /v1/vector_stores/:id
msq_list_vector_store_filesvectorStoreIdGET /v1/vector_stores/:id/files
msq_add_vector_store_filevectorStoreId, file_id, chunking_strategy?, enhancePDF?POST /v1/vector_stores/:id/files
msq_get_vector_store_filevectorStoreId, fileIdGET …/files/:fileId
msq_get_vector_store_file_detailsvectorStoreIdGET …/file-details
msq_cancel_vector_store_sessionsessionIdPOST /v1/vector_stores/cancel
msq_list_files(no params)GET /v1/files
msq_upload_filefilePath, purpose, relativePath?, collectionName?, filename?POST /v1/files (multipart)
msq_get_filefileIdGET /v1/files/:id
msq_delete_filefileIdDELETE /v1/files/:id
msq_get_file_contentfileId, maxBytes?GET /v1/files/:id/content
msq_list_user_collections(no params)GET /v1/user-collections

msq_upload_file reads filePath from the server's local filesystem. On the hosted server you cannot reference your own local files through this tool; upload via the Files API and reference the resulting fileId instead.

Scheduled runs

ToolParams
msq_list_scheduled_runs(no params)
msq_create_scheduled_runagentName, prompt, startDate, timesToRun[], repeatInterval, daysOfWeek?, dayOfMonth?, status?, sendEmail?, deliveryMethod?, slackWebhookUrl?, slackMetadata?
msq_update_scheduled_runid + scheduled-run fields (partial)
msq_delete_scheduled_runid
msq_toggle_scheduled_runid
msq_get_scheduled_run_resultsid

Flagship tool schemas (verbatim)

msq_create_workflow:

ts
{
  id?: string                  // generated when omitted
  name?: string                // default "Untitled Workflow"
  mainAgentRef?: string | null // "agent/<agentId>" or "shared/<ownerUsername>/<slug>"; null clears
  mainAgentId?: string | null  // legacy; translated to "agent/<id>"
  mainPrompt?: string          // contains {{data}} templates and <selector|#|dataKey> helpers
  dataPayload?: string         // JSON string; must be valid JSON if provided
  concurrency?: number         // max concurrent helper executions
  delimiter?: string           // default "|#|"
  failureMessage?: string
  failureInstruction?: string
}

msq_run_factory:

ts
{
  factoryConfigId: string
  initialCarryPayload?: string  // defaults to "" on the backend
}

See also

Last updated: