QuantConnect
A server for local interactions with the QuantConnect API.
QuantConnect MCP Server
The QuantConnect MCP Server is a bridge for AIs (such as Claude and OpenAI o3 Pro) to interact with our cloud platform. When equipped with our MCP, the AI can perform tasks on your behalf through our API such as updating projects, writing strategies, backtesting, and deploying strategies to production live-trading.
This is the OFFICIAL implementation of QuantConnect's MCP, maintained by the QuantConnect team. We recommend using the official version to ensure security of your code and API tokens. Our implementation is tested and dockerized for easy cross-platform deployment.
Getting Started
To connect local MCP clients (like Claude Desktop) to the QC MCP Server, follow these steps:
- Install and open Docker Desktop.
- Install and open Claude Desktop.
- In Claude Desktop, click File > Settings > Developer > Edit Config.
- Edit the
claude_desktop_config.jsonfile to include the followingquantconnectconfiguration:
{
"mcpServers": {
"quantconnect": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "QUANTCONNECT_USER_ID",
"-e", "QUANTCONNECT_API_TOKEN",
"-e", "AGENT_NAME",
"--platform", "<your_platform>",
"quantconnect/mcp-server"
],
"env": {
"QUANTCONNECT_USER_ID": "<your_user_id>",
"QUANTCONNECT_API_TOKEN": "<your_api_token>",
"AGENT_NAME": "MCP Server"
}
}
}
}
To get your user Id and API token, see Request API Token.
Our MCP server is multi-platform capable. The options are linux/amd64 for Intel/AMD chips and linux/arm64 for ARM chips (for example, Apple's M-series chips).
If you simultaneously run multiple agents, set a unique value for the AGENT_NAME environment variable for each agent to keep record of the request source.
-
Restart Claude Desktop.
Claude Desktop automatically pulls our MCP server from Docker Hub and connects to it.
To view all the MCP clients and the features they support, see the Feature Support Matrix in the MCP documentation.
To keep the Docker image up-to-date, pull the latest MCP server from Docker Hub in the terminal.
docker pull quantconnect/mcp-server
If you have an ARM chip, add the --platform linux/arm64 option.
Available Tools (64)
| Tools provided by this Server | Short Description |
|---|---|
read_account | Read the organization account status. |
create_project | Create a new project in your default organization. |
read_project | List the details of a project or a set of recent projects. |
list_projects | List the details of all projects. |
update_project | Update a project's name or description. |
delete_project | Delete a project. |
create_project_collaborator | Add a collaborator to a project. |
read_project_collaborators | List all collaborators on a project. |
update_project_collaborator | Update collaborator information in a project. |
delete_project_collaborator | Remove a collaborator from a project. |
lock_project_with_collaborators | Lock a project so you can edit it. |
read_project_nodes | Read the available and selected nodes of a project. |
update_project_nodes | Update the active state of the given nodes to true. |
create_compile | Asynchronously create a compile job request for a project. |
read_compile | Read a compile packet job result. |
create_file | Add a file to a given project. |
read_file | Read a file from a project, or all files in the project if no file name is provided. |
update_file_name | Update the name of a file. |
update_file_contents | Update the contents of a file. |
patch_file | Apply a patch (unified diff) to a file in a project. |
delete_file | Delete a file in a project. |
create_backtest | Create a new backtest request and get the backtest Id. |
read_backtest | Read the results of a backtest. |
list_backtests | List all the backtests for the project. |
read_backtest_chart | Read a chart from a backtest. |
read_backtest_orders | Read out the orders of a backtest. |
read_backtest_insights | Read out the insights of a backtest. |
update_backtest | Update the name or note of a backtest. |
delete_backtest | Delete a backtest from a project. |
estimate_optimization_time | Estimate the execution time of an optimization with the specified parameters. |
create_optimization | Create an optimization with the specified parameters. |
read_optimization | Read an optimization. |
list_optimizations | List all the optimizations for a project. |
update_optimization | Update the name of an optimization. |
abort_optimization | Abort an optimization. |
delete_optimization | Delete an optimization. |
authorize_connection | Authorize an external connection with a live brokerage or data provider. |
create_live_algorithm | Create a live algorithm. |
read_live_algorithm | Read details of a live algorithm. |
list_live_algorithms | List all your past and current live trading deployments. |
read_live_chart | Read a chart from a live algorithm. |
read_live_logs | Get the logs of a live algorithm. |
read_live_portfolio | Read out the portfolio state of a live algorithm. |
read_live_orders | Read out the orders of a live algorithm. |
read_live_insights | Read out the insights of a live algorithm. |
stop_live_algorithm | Stop a live algorithm. |
liquidate_live_algorithm | Liquidate and stop a live algorithm. |
create_live_command | Send a command to a live trading algorithm. |
broadcast_live_command | Broadcast a live command to all live algorithms in an organization. |
upload_object | Upload files to the Object Store. |
read_object_properties | Get Object Store properties of a specific organization and key. |
read_object_store_file_job_id | Create a job to download files from the Object Store and then read the job Id. |
read_object_store_file_download_url | Get the URL for downloading files from the Object Store. |
list_object_store_files | List the Object Store files under a specific directory in an organization. |
delete_object | Delete the Object Store file of a specific organization and key. |
read_lean_versions | Returns a list of LEAN versions with basic information for each version. |
check_initialization_errors | Run a backtest for a few seconds to initialize the algorithm and get inialization errors if any. |
complete_code | Show the code completion for a specific text input. |
enhance_error_message | Show additional context and suggestions for error messages. |
update_code_to_pep8 | Update Python code to follow PEP8 style. |
check_syntax | Check the syntax of a code. |
search_quantconnect | Search for content in QuantConnect. |
read_mcp_server_version | Returns the version of the QC MCP Server that's running. |
read_latest_mcp_server_version | Returns the latest version of the QC MCP Server released. |
Tool Details
Tool: read_account
Read the organization account status.
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: create_project
Create a new project in your default organization.
| Parameter | Type | Description |
|---|---|---|
name | string | Project name. |
language | string | Programming language to use. |
organizationId | string optional | The organization to create project under. If you don't provide a value, it defaults to your preferred organization. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_project
List the details of a project or a set of recent projects.
| Parameter | Type | Description |
|---|---|---|
projectId | integer optional | Id of the project to read. |
start | integer optional | Starting (inclusive, zero-based) index of the projects to fetch. If you provide this property, omit the project Id property. |
end | integer optional | Last (exlusive) index of the projects to fetch. If you provide this property, omit the project Id property. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: list_projects
List the details of all projects.
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_project
Update a project's name or description.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Project Id to which the file belongs. |
name | string optional | The new name for the project. |
description | string optional | The new description for the project. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: delete_project
Delete a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to delete. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: create_project_collaborator
Add a collaborator to a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to add the collaborator to. |
collaboratorUserId | string | User Id of the collaborator to add. |
collaborationLiveControl | boolean | Gives the right to deploy and stop live algorithms. |
collaborationWrite | boolean | Gives the right to edit the code. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: read_project_collaborators
List all collaborators on a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project from which to read the collaborators. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_project_collaborator
Update collaborator information in a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project the collaborator is on. |
collaboratorUserId | string | User Id of the collaborator to update. |
liveControl | boolean | Gives the right to deploy and stop live algorithms. |
write | boolean | Gives the right to edit the code. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: delete_project_collaborator
Remove a collaborator from a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to remove the collaborator from. |
collaboratorId | string | User Id of the collaborator to remove. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: lock_project_with_collaborators
Lock a project so you can edit it.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to edit. |
codeSourceId | string | Name of the environment that's creating the request. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: read_project_nodes
Read the available and selected nodes of a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to which the nodes refer. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_project_nodes
Update the active state of the given nodes to true.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Project Id to which the nodes refer. |
nodes | array optional | List of node Ids the project may use. If you omit this property or pass an empty list, the best node will be automatically selected for backtest, research, and live trading. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: create_compile
Asynchronously create a compile job request for a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to compile. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_compile
Read a compile packet job result.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project you requested to compile. |
compileId | string | Compile Id returned during the creation request. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: create_file
Add a file to a given project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to add the file. |
name | string | The name of the new file. |
content | string optional | The content of the new file. |
codeSourceId | string optional | Name of the environment that's creating the request. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: read_file
Read a file from a project, or all files in the project if no file name is provided.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the file. |
name | string optional | The name of the file to read. |
codeSourceId | string optional | Name of the environment that's creating the request. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_file_name
Update the name of a file.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the file. |
name | string | The current name of the file. |
newName | string | The new name for the file. |
codeSourceId | string optional | Name of the environment that's creating the request. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: update_file_contents
Update the contents of a file.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the file. |
name | string | The name of the file to update. |
content | string | The new contents of the file. |
codeSourceId | string optional | Name of the environment that's creating the request. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: patch_file
Apply a patch (unified diff) to a file in a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the file. |
patch | string | A patch string in unified diff format (as produced by git diff). It specifies changes to apply to one or more files in the project. |
codeSourceId | string optional | Name of the environment that's creating the request. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: delete_file
Delete a file in a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the file. |
name | string | The name of the file to delete. |
codeSourceId | string optional | Name of the environment that's creating the request. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: create_backtest
Create a new backtest request and get the backtest Id.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to backtest. |
compileId | string | Compile Id for the project to backtest. |
backtestName | string | Name for the new backtest. |
parameters | object optional | Parameters to use for the backtest. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_backtest
Read the results of a backtest.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the backtest. |
backtestId | string | Id of the backtest to read. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: list_backtests
List all the backtests for the project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project from which to read one or multiple backtests. |
includeStatistics | boolean optional | If true, the backtests summaries from the response will contain the statistics with their corresponding values. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: read_backtest_chart
Read a chart from a backtest.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the backtest. |
backtestId | string | Id of the backtest for this chart request. |
name | string | The requested chart name. |
count | integer | The number of data points to request. |
start | integer | The start timestamp of the request in Unix time. |
end | integer | The end timestamp of the request in Unix time. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: read_backtest_orders
Read out the orders of a backtest.
| Parameter | Type | Description |
|---|---|---|
start | integer | Starting index of the orders to be fetched. |
end | integer | Last index of the orders to be fetched. Note that end - start must be less than 100. |
projectId | integer | Id of the project from which to read the backtest. |
backtestId | string | Id of the backtest from which to read the orders. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: read_backtest_insights
Read out the insights of a backtest.
| Parameter | Type | Description |
|---|---|---|
start | integer | Starting index of the insights to be fetched. |
end | integer | Last index of the insights to be fetched. Note that end - start must be less than 100. |
projectId | integer | Id of the project from which to read the backtest. |
backtestId | string | Id of the backtest from which to read the insights. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_backtest
Update the name or note of a backtest.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the backtest. |
backtestId | string | Id of the backtest to update. |
name | string optional | Name to assign to the backtest. |
note | string optional | Note to attach to the backtest. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: delete_backtest
Delete a backtest from a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that contains the backtest. |
backtestId | string | Id of the backtest to delete. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: estimate_optimization_time
Estimate the execution time of an optimization with the specified parameters.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to optimize. |
name | string | Name of the optimization. |
target | string | Target statistic of the optimization to minimize or maximize. |
targetTo | string | Target extremum of the optimization. |
targetValue | number optional | Desired value for the optimization target statistic. |
strategy | string | Optimization strategy. |
compileId | string optional | Optimization compile Id. |
parameters | array | Optimization parameters. |
constraints | array optional | Optimization constraints. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: create_optimization
Create an optimization with the specified parameters.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to optimize. |
name | string | Name of the optimization. |
target | string | Target statistic of the optimization to minimize or maximize. |
targetTo | string | Target extremum of the optimization. |
targetValue | number optional | Desired value for the optimization target statistic. |
strategy | string | Optimization strategy. |
compileId | string | Optimization compile Id. |
parameters | array | Optimization parameters. |
constraints | array optional | Optimization constraints. |
estimatedCost | number | Estimated cost for optimization. |
nodeType | string | Optimization node type. |
parallelNodes | integer | Number of parallel nodes for optimization. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_optimization
Read an optimization.
| Parameter | Type | Description |
|---|---|---|
optimizationId | string | Id of the optimization to read. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: list_optimizations
List all the optimizations for a project.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the Project to get a list of optimizations for. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_optimization
Update the name of an optimization.
| Parameter | Type | Description |
|---|---|---|
optimizationId | string | Id of the optimization to update. |
name | string | Name to assign to the optimization. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: abort_optimization
Abort an optimization.
| Parameter | Type | Description |
|---|---|---|
optimizationId | string | Id of the optimization to abort. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: delete_optimization
Delete an optimization.
| Parameter | Type | Description |
|---|---|---|
optimizationId | string | Id of the optimization to delete. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: authorize_connection
Authorize an external connection with a live brokerage or data provider.
| Parameter | Type | Description |
|---|---|---|
brokerage | string | The brokerage to authenticate a connection with. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: create_live_algorithm
Create a live algorithm.
| Parameter | Type | Description |
|---|---|---|
versionId | string | The version of the Lean used to run the algorithm. -1 is master, however, sometimes this can create problems with live deployments. If you experience problems using, try specifying the version of Lean you would like to use. |
projectId | integer | Project Id. |
compileId | string | Compile Id. |
nodeId | string | Id of the node that will run the algorithm. |
brokerage | object | Brokerage configuration for the live algorithm. |
dataProviders | object optional | Dictionary of data provider configurations to be used in the live algorithm. Provide at least one. The order in which you define the providers defines their order of precedence. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_live_algorithm
Read details of a live algorithm.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to read. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: list_live_algorithms
List all your past and current live trading deployments.
| Parameter | Type | Description |
|---|---|---|
projectId | integer optional | Id of the project to include in response. If you omit this property, the response includes all your projects. |
status | status enum optional | Status of the live deployments to include in the response. If you omit this property, the response includes deployments with any status. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_live_chart
Read a chart from a live algorithm.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project that's live trading. |
name | string | Name of the chart to read. |
count | integer | The number of data points to request. |
start | integer | The unix start time of the request. |
end | integer | The unix end time of the request. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_live_logs
Get the logs of a live algorithm.
| Parameter | Type | Description |
|---|---|---|
format | `` optional | Format of the log results. |
projectId | integer | Id of the project that contains the live running algorithm. |
algorithmId | string | Deploy Id (Algorithm Id) of the live running algorithm. |
startLine | integer | Start line (inclusive) of logs to read. The lines numbers start at 0. |
endLine | integer | End line (exclusive) of logs to read, where endLine - startLine <= 250. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_live_portfolio
Read out the portfolio state of a live algorithm.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project from which to read the live algorithm. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_live_orders
Read out the orders of a live algorithm.
| Parameter | Type | Description |
|---|---|---|
start | integer | Starting index of the orders to be fetched. |
end | integer | Last index of the orders to be fetched. Note that end - start must be <= 1,000. |
projectId | integer | Id of the project from which to read the live algorithm. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_live_insights
Read out the insights of a live algorithm.
| Parameter | Type | Description |
|---|---|---|
start | integer optional | Starting index of the insights to be fetched. Required if end > 100. |
end | integer | Last index of the insights to be fetched. Note that end - start must be less than 100. |
projectId | integer | Id of the project from which to read the live algorithm. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: stop_live_algorithm
Stop a live algorithm.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Id of the project to stop trading live. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: liquidate_live_algorithm
Liquidate and stop a live algorithm.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Project Id for the live instance to liquidate. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: create_live_command
Send a command to a live trading algorithm.
| Parameter | Type | Description |
|---|---|---|
projectId | integer | Project for the live instance we want to run the command against. |
command | object | The command to run. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: broadcast_live_command
Broadcast a live command to all live algorithms in an organization.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Organization Id of the projects we would like to broadcast the command to |
excludeProjectId | integer optional | Project for the live instance we want to exclude from the broadcast list. If null, all projects will be included. |
command | object | The command to run. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: upload_object
Upload files to the Object Store.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Orgainization ID. |
key | string | Unique key to access the object in Object Store. |
objectData | string | Object data to be stored. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: read_object_properties
Get Object Store properties of a specific organization and key.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Id of the organization that owns the Object Store. |
key | string | Key in the Object Store. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: read_object_store_file_job_id
Create a job to download files from the Object Store and then read the job Id.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Id of the organization that owns the Object Store. |
keys | array | Keys of the Object Store files. |
This tool modifies it's environment.
This tool doesn't perform destructive updates.
Calling this tool repeatedly with the same arguments has additional effects.
This tool may interact with an "open world" of external entities.
Tool: read_object_store_file_download_url
Get the URL for downloading files from the Object Store.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Id of the organization that owns the Object Store. |
jobId | string | Id of the download job for the files. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: list_object_store_files
List the Object Store files under a specific directory in an organization.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Id of the organization to list the Object Store files from. |
path | string optional | Path to a directory in the Object Store. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: delete_object
Delete the Object Store file of a specific organization and key.
| Parameter | Type | Description |
|---|---|---|
organizationId | string | Id of the organization that owns the Object Store. |
key | string | Key of the Object Store file to delete. |
This tool modifies it's environment.
This tool may perform destructive updates.
Calling this tool repeatedly with the same arguments has no additional effect.
This tool may interact with an "open world" of external entities.
Tool: read_lean_versions
Returns a list of LEAN versions with basic information for each version.
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: check_initialization_errors
Run a backtest for a few seconds to initialize the algorithm and get inialization errors if any.
| Parameter | Type | Description |
|---|---|---|
language | string | Programming language. |
files | array | Files to process. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: complete_code
Show the code completion for a specific text input.
| Parameter | Type | Description |
|---|---|---|
language | string | Programming language for the code completion. |
sentence | string | Sentence to complete. |
responseSizeLimit | integer optional | Maximum size of the responses. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: enhance_error_message
Show additional context and suggestions for error messages.
| Parameter | Type | Description |
|---|---|---|
language | string | Programming language for the code completion. |
error | object | Error message to enhance. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: update_code_to_pep8
Update Python code to follow PEP8 style.
| Parameter | Type | Description |
|---|---|---|
files | array | Files of the project. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: check_syntax
Check the syntax of a code.
| Parameter | Type | Description |
|---|---|---|
language | string | Programming language. |
files | array | Files to process. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: search_quantconnect
Search for content in QuantConnect.
| Parameter | Type | Description |
|---|---|---|
language | string | Programming language of the content to search. |
criteria | array | Criteria for the search. |
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: read_mcp_server_version
Returns the version of the QC MCP Server that's running.
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Tool: read_latest_mcp_server_version
Returns the latest version of the QC MCP Server released.
This tool doesn't modify it's environment.
This tool may interact with an "open world" of external entities.
Debugging
Build
To build the Docker image from source, clone this repository and then run docker build -t quantconnect/mcp-server ..
Logs
To log to the mcp-server-quantconnect.log file, import sys and then print("Hello world", file=sys.stderr).
Inspector
To start the inspector, run npx @modelcontextprotocol/inspector uv run src/main.py.
To pass a model to the inspector tool, use JSON (for example, {"name":"My Project","language":"Py"}).
Verwandte Server
Alpha Vantage MCP Server
SponsorAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
claude-session-continuity-mcp
Zero-config session continuity for Claude Code. Auto-captures context via Claude Hooks, provides 24 tools for memory, tasks, solutions, and knowledge graph. Multilingual semantic search (94+ languages).
Remote MCP Server on Cloudflare
A customizable remote MCP server for deployment on Cloudflare Workers, operating without authentication.
Project Atlantis
A Python MCP host server that allows for dynamic installation of functions and third-party MCP tools.
Add Tool
Fetches and sets up an MCP server from a specified GitHub repository.
BCMS MCP
Give me a one - two sentence description of the BCMS MCP # MCP The BCMS Model Context Protocol (MCP) integration enables AI assistants like Claude, Cursor, and other MCP-compatible tools to interact directly with your BCMS content. This allows you to create, read, and update content entries, manage media files, and explore your content structure—all through natural language conversations with AI. ## What is MCP? The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open standard developed by Anthropic that allows AI applications to securely connect to external data sources and tools. With BCMS MCP support, you can leverage AI assistants to: - Query and explore your content structure - Create new content entries with AI-generated content - Update existing entries - Manage your media library - Get intelligent suggestions based on your content model --- ## Getting Started ### Prerequisites 1. A BCMS account with an active instance 2. An MCP key with appropriate permissions 3. An MCP-compatible client (Claude Desktop, Cursor, or any MCP client) ### Step 1: Create an MCP Key 1. Navigate to your BCMS dashboard 2. Go to Settings → MCP 3. Click Create MCP Key 4. Configure the permissions for templates you want the AI to access:GET: Read entries 5. POST: Create entries 6. PUT: Update entries 7. DELETE: Delete entries Note: Right now, MCP only supports creating, reading and updating content. ### Step 2: Configure Your MCP Client You can find full instructions for integrating BCMS with your AI tools right inside BCMS, on the MCP page. But in general, installing BCMS MCP works in a standard way: ``` { "mcpServers": { "bcms": { "url": "https://app.thebcms.com/api/v3/mcp?mcpKey=YOUR_MCP_KEY" } } } ``` ## Available Tools Once connected, your AI assistant will have access to the following tools based on your MCP key permissions: ### Content Discovery #### list_templates_and_entries Lists all templates and their entries that you have access to. This is typically the first tool to call when exploring your BCMS content. Returns: - Template IDs, names, and slugs - Entry IDs with titles and slugs for each language Example prompt: "Show me all the templates and entries in my BCMS" --- ### Entry Management #### list_entries_for_{templateId} Retrieves all entries for a specific template with full content data. A separate tool is generated for each template you have access to. Returns: - Complete entry data including all meta fields - Content in all configured languages - Entry statuses Example prompt: "List all blog posts from my Blog template" --- #### create_entry_for_{templateId} Creates a new entry for a specific template. The input schema is dynamically generated based on your template's field structure. Input: - statuses: Array of status assignments per language - meta: Array of metadata for each language (title, slug, custom fields) - content: Array of content nodes for each language Example prompt: "Create a new blog post titled 'Getting Started with BCMS' with a brief introduction paragraph" --- #### update_entry_for_{templateId} Updates an existing entry for a specific language. Input: - entryId: The ID of the entry to update - lng: Language code (e.g., "en") - status: Optional status ID - meta: Updated metadata - content: Updated content nodes Example prompt: "Update the introduction paragraph of my 'Getting Started' blog post" --- ### Media Management #### list_all_media Lists all media files in your media library. Returns: - Media IDs, names, and types - File metadata (size, dimensions for images) - Parent directory information Example prompt: "Show me all images in my media library" --- #### list_media_dirs Lists the directory structure of your media library. Returns: - Hierarchical directory structure - Directory IDs and names Example prompt: "Show me the folder structure of my media library" --- #### create-media-directory Creates a new directory in your media library. Input: - name: Name of the directory - parentId: Optional parent directory ID (root if not specified) Example prompt: "Create a new folder called 'Blog Images' in my media library" --- #### request-upload-media-url Returns a URL you use to upload a file (for example via POST with multipart form data), which avoids pushing large binaries through the MCP tool payload. You still need a valid file name and MIME type when uploading, as described in the tool response. Availability: Only when the MCP key has Can mutate media enabled. Example prompt: “Give me an upload URL for a new hero image, then tell me how to upload it.” Input: - fileName: Name of the file with extension - fileData: Base64-encoded file data (with data URI prefix) - parentId: Optional parent directory ID Example prompt: "Upload this image to my Blog Images folder" --- ### Linking Tools #### get_entry_pointer_link Generates an internal BCMS link to an entry for use in content. Input: - entryId: The ID of the entry to link to Returns: - Internal link format: entry:{entryId}@*_{templateId}:entry Example prompt: "Get me the internal link for the 'About Us' page entry" --- #### get_media_pointer_link Generates an internal BCMS link to a media item for use in content. Input: - mediaId: The ID of the media item Returns: - Internal link format: media:{mediaId}@*_@*_:entry Example prompt: "Get the link for the hero image so I can use it in my blog post" --- ## Content Structure ### Entry Content Nodes When creating or updating entries, content is structured as an array of nodes. Supported node types include: Type Description paragraph Standard text paragraph heading Heading (h1-h6) bulletList Unordered list orderedList Numbered list listItem List item codeBlock Code block with syntax highlighting blockquote Quote block image Image node widget Custom widget with props ### Example Content Structure ``` { "content": [ { "lng": "en", "nodes": [ { "type": "heading", "attrs": { "level": 1 }, "content": [ { "type": "text", "text": "Welcome to BCMS" } ] }, { "type": "paragraph", "content": [ { "type": "text", "text": "This is your first paragraph." } ] } ] } ] } ``` ## Security & Permissions ### MCP Key Scopes Your MCP key controls what the AI can access: - Template Access: Only templates explicitly granted in the MCP key are visible - Operation Permissions: Each template can have independent GET/POST/PUT/DELETE permissions - Media Access: Media operations are controlled separately ### Best Practices 1. Principle of Least Privilege: Only grant the permissions needed for your use case 2. Separate Keys: Create different MCP keys for different purposes or team members 3. Regular Rotation: Periodically rotate your MCP keys ## Use Cases ### Content Creation Workflows Blog Post Creation "Create a new blog post about the benefits of headless CMS. Include an introduction, three main benefits with explanations, and a conclusion. Use the Blog template." Product Updates "Update the price field for all products in the Electronics category to apply a 10% discount" ### Content Exploration Content Audit "List all blog posts that don't have a featured image set" Translation Status "Show me which entries are missing German translations" ### Media Organization Library Cleanup "Show me all unused images in the media library" Folder Setup "Create folder structure for: Products > Categories > Electronics, Clothing, Home" ## Troubleshooting ### Common Issues #### "MCP key not found" - Verify your MCP key format: keyId.keySecret.instanceId - Ensure the MCP key hasn't been deleted or deactivated - Check that you're using the correct instance #### "MCP key does not have access to template" - Review your MCP key permissions in the dashboard - Ensure the required operation (GET/POST/PUT/DELETE) is enabled for the template #### Session Expired - MCP sessions may timeout after periods of inactivity - Simply start a new conversation to establish a fresh session ### Getting Help - Documentation: [thebcms.com/docs](https://thebcms.com/docs) - Support: [[email protected]](mailto:[email protected]) - Community: [Join BCMS Discord](https://discord.com/invite/SYBY89ccaR) for community support ## Technical Reference ### Endpoint POST https://app.thebcms.com/api/v3/mcp?mcpKey={MCP_KEY} ### Transport BCMS MCP uses the Streamable HTTP transport with session management. Sessions are maintained via the mcp-session-id header. ### Response Format All tools return structured JSON responses conforming to the MCP specification with: - content: Array of content blocks - structuredContent: Typed response data ## Rate Limits MCP requests are subject to the same rate limits as API requests: - Requests are tracked per MCP key - Contact support if you need higher limits for production workloads
Remote MCP Server on Cloudflare (Authless)
An example of a remote MCP server deployable on Cloudflare Workers without authentication, featuring customizable tools.
MCP LLM Integration Server
An MCP server for integrating local Large Language Models with MCP-compatible clients.
Intlayer
A MCP Server that enhance your IDE with AI-powered assistance for Intlayer i18n / CMS tool: smart CLI access, versioned docs.
Claude Google Apps Script MCP Guide
Integrate Claude AI with Google Apps Script to automate tasks in Google Sheets and Gmail.
Remote MCP Server (Authless)
An example of a remote MCP server deployable on Cloudflare Workers, without authentication.