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.

  • Desktop install: run the npm package over stdio with npx -y @missionsquad/mcp-msq@latest.
  • Auth: your MissionSquad API key (msq-...). The server forwards it to the API as the x-api-key header.
  • Tools: all prefixed msq_, returning JSON text; some tools return compact summaries.

Every tool call ultimately hits the MissionSquad REST API documented in the API reference. Use the MCP tool's published schema for arguments and outputs; summary tools intentionally return less data than the corresponding REST endpoint.

Desktop setup ​

Install both components: the npm MCP server connects the app to your account, and the msq-config-agent skill teaches it how to configure agents, workflows, factories, schedules, and Agent Pages. The skill does not install the server or contain an API key.

AppMCP server and skill instructions
ChatGPT desktop (local MCP)ChatGPT desktop setup
Claude Desktop (Chat)Claude desktop setup

Both guides include the same portable configuration skill ZIP. Recording a workflow is not required.

Prerequisites ​

  • Install Node.js version 20 or later, with npm/npx. In Terminal or PowerShell, check node --version, npm --version, and npx --version.
  • Have your MissionSquad account's API key (msq-...) ready. This is the MissionSquad API credential, not an OpenAI or Anthropic provider key.
  • Use https://agents.missionsquad.ai/v1 as the API base URL, or your own MissionSquad deployment's API URL ending in /v1.
  • Install a current desktop app with local MCP enabled by your workspace, and allow npm registry access for the package download.

The published package is @missionsquad/mcp-msq. npx -y installs it from npm as needed and starts it for the desktop app; a separate global npm install is unnecessary. The app owns the process, so do not leave a manually launched server running in a terminal. Put your real key in the app's local MCP configuration, never in the skill ZIP or a chat prompt.

Connecting ​

MissionSquad does not currently provide a hosted MCP endpoint. Install the npm server locally with one of the desktop guides above. The hosted MissionSquad REST API is the upstream service that this local server calls; it is not a remote MCP connection URL.

Local (stdio) ​

Run the published package with a client that supports local MCP stdio processes. The following is the JSON configuration shape used by Claude Desktop; ChatGPT desktop uses the MCP settings or TOML configuration.

jsonc
{
  "mcpServers": {
    "mission-squad": {
      "command": "npx",
      "args": ["-y", "@missionsquad/mcp-msq@latest"],
      "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 machine running the local MCP process. Use a path accessible to that process, or upload through the Files API and reference the resulting fileId.

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 ​