| Crates.io | mc-mcp |
| lib.rs | mc-mcp |
| version | 0.1.10 |
| created_at | 2025-04-20 03:44:51.953615+00 |
| updated_at | 2025-04-21 05:28:39.537982+00 |
| description | A Model Context Protocol (MCP) server for metacontract smart contract development. |
| homepage | https://github.com/metacontract/mc-mcp |
| repository | https://github.com/metacontract/mc-mcp |
| max_upload_size | |
| id | 1641351 |
| size | 310,768 |
A Model Context Protocol (MCP) server for the metacontract (mc) framework, providing smart contract development support via Foundry integration and semantic documentation search.
mc-mcp is an extensible MCP server designed for the metacontract (mc) framework. It enables AI-powered smart contract development workflows by exposing tools such as:
mc_search_docs_semantic: Performs semantic search over mc documentation and user-configured sources, returning structured JSON results.mc_setup: Initializes a new Foundry project using the metacontract/template. (Set setup.force=true in the config if the directory is not empty.)mc_test: Runs Foundry tests (forge test) in your workspace.mc_deploy: Deploys contracts using the script specified in mcp_config.toml. Supports dry-run (default) and broadcast mode (broadcast: true argument).mc_upgrade: Upgrades contracts using the script specified in mcp_config.toml. Supports dry-run and broadcast mode.mc_lint: (Coming Soon) Lints project files for best practices and errors.mc_erc7201_slot: Calculates the namespaced storage slot using ERC-7201.Project Root is always specified by the MC_PROJECT_ROOT environment variable.
MC_PROJECT_ROOT environment variable is required because path resolution is delegated to the MCP client implementation. This ensures consistent and reliable behavior across different environments.MC_PROJECT_ROOT to your project root directory before running any mc-mcp command or tool.mcp_config.toml, is expected to be in this directory.MC_PROJECT_ROOT is not set or does not exist, mc-mcp will return an error and not start.mcp_config.toml is missing, mc-mcp will use built-in defaults and log a warning./path/to/your/project/
├── mcp_config.toml # (optional) Project configuration
├── contracts/
├── scripts/
└── ...
mcp_config.toml)MC_PROJECT_ROOT directory.# recommended for most users
cargo install mc-mcp
# Or, to use the latest development version from GitHub:
cargo install --git https://github.com/metacontract/mc-mcp.git
# Alternatively, you can clone and build manually:
git clone https://github.com/metacontract/mc-mcp.git
cd mc-mcp
cargo build --release
mc-mcp works with any MCP-compatible client, such as:
Add your MCP server in the settings (./cursor/mcp.json or global settings):
{
"mcpServers": {
"mc-mcp": {
"command": "mc-mcp", // or "/path/to/mc-mcp/target/release/mc-mcp",
"env": {
"MC_PROJECT_ROOT": "/absolute-path/to/your/project"
}
}
}
}
Cline auto-detects MCP servers in your workspace. For advanced configuration, see Cline's documentation.
RooCode supports MCP integration out of the box. See RooCode's documentation for details.
{
"mcpServers": {
"mc-mcp": {
"disabled": false,
"timeout": 60,
"command": "mc-mcp",
"transportType": "stdio",
"alwaysAllow": ["mc_setup", "mc_search_docs_semantic", "mc_test", "mc_deploy", "mc_upgrade"], // if needed
"env": {
"MC_PROJECT_ROOT": "/absolute-path/to/your/project"
}
}
}
}
Then, your MCP client starts the mc-mcp server automatically.
prebuilt_index.jsonl.gz) will be downloaded from the latest GitHub Release if not present.You can simply instruct your agent to "setup mc project".
or, manual setup
forge init <your-project-name> -t metacontract/template
cd <your-project-name>
mc_test, mc_search_docs_semantic, etc.)Create a file named mcp_config.toml in your project root:
# Reference sources for semantic search
[reference]
# The prebuilt index is downloaded to the system cache directory by default.
# You can override the path here if needed:
# prebuilt_index_path = "/custom/path/to/prebuilt_index.jsonl.gz"
[[reference.sources]]
name = "mc-docs"
source_type = "local"
path = "metacontract/mc/site/docs"
[[reference.sources]]
name = "solidity-docs"
source_type = "local"
path = "docs/solidity"
[[reference.sources]]
name = "user-docs"
source_type = "local"
path = "docs/user"
# Default scripts used by tools
[scripts]
deploy = "scripts/Deploy.s.sol" # Used by mc_deploy
upgrade = "scripts/Upgrade.s.sol" # Used by mc_upgrade
# Optional: Settings for broadcasting transactions (used when broadcast=true)
rpc_url = "http://localhost:8545" # RPC endpoint URL
private_key_env_var = "PRIVATE_KEY" # Name of the env var holding the deployer's private key
prebuilt_index_path ... (optional) Path to a prebuilt index (jsonl or gzipped jsonl). If set, it overrides the default cache location. The index will be loaded and upserted into Qdrant on startup.[[reference.sources]] must have name, source_type (usually local), and path (relative to the execution directory).[scripts].deploy and [scripts].upgrade specify the default Foundry script paths used by the mc_deploy and mc_upgrade tools respectively.[scripts].rpc_url and [scripts].private_key_env_var are required when using mc_deploy or mc_upgrade with the broadcast: true argument. forge will use these to send the transaction.See also: config.rs for the full config structure.
modelcontextprotocol-rust-sdk) with #[tool] annotation-based tool definitionsrc/domain/ — Core business logic, traits, entitiessrc/application/ — Use cases, DTOssrc/infrastructure/ — Integrations (Qdrant, embeddings, file system, etc.)src/main.rs — Entry point, MCP tool registration, DISome tests (especially integration tests and embedding-related tests) may fail due to OS file descriptor limits or cache lock issues.
make test-all
make test-lib
make test-integration
make clean-cache
Too many open files errors:
ulimit -n 4096cargo test -- --test-threads=1 (or use make test-lib / make test-integration).lock errors (related to embedding model cache):
make clean-cacheforge commands fail unexpectedly:
src/main.rs tests) is correct.ulimit).For up-to-date milestones, progress, and detailed task tracking, see: ➡️ mc-mcp Task List