AI Agents (MCP)
Asentum MCP in Other Clients
VS Code, Windsurf, Codex CLI, Gemini CLI, Cline, Zed · Estimated read time: 6 minutes
Before you start
- Node.js 18.17 or newer (
node --version), andnpx -y @asentum/mcp --versionprints a version. - Every client below starts the server the same way: command
npx, arguments-y @asentum/mcp. Only the file and the key names differ. - Each section shows a read-only setup first, then the same entry with a testnet key file. See Making a testnet key for the key, and keep
ASENTUM_DRY_RUN=1while you try it. - To check it works, ask: "What's the Asentum chain status?" The agent should call
get_chain_statusand report chain id 1423. - Put a server with a key in your user-level config, never in a project file that gets committed.
VS Code (GitHub Copilot agent mode)
VS Code uses servers as the top-level key (not mcpServers) and wants a type. For one project, create .vscode/mcp.json. For all projects, run MCP: Open User Configuration from the Command Palette.
.vscode/mcp.json
{
"servers": {
"asentum": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@asentum/mcp"]
}
}
}User mcp.json, with a key file
{
"servers": {
"asentum": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"env": {
"ASENTUM_KEY_FILE": "/Users/you/.asentum-mcp/testnet.key",
"ASENTUM_DRY_RUN": "1"
}
}
}
}Check: run MCP: List Servers, pick asentum and start it if it is not running. Then open Copilot Chat, switch to Agent mode, and the Asentum tools appear in the tools picker. Trouble: MCP: List Servers, then Show Output on the server, shows its startup log.
Windsurf (Devin Desktop)
Windsurf was renamed Devin Desktop in 2026. Its Cascade agent reads mcp_config.json. The easiest way to open it: in the Cascade panel, click the ... menu at the top right, then the Open MCP config file icon in the MCPs section. Current builds keep it at ~/.config/devin/mcp_config.json (macOS, Linux) or %APPDATA%\devin\mcp_config.json (Windows); older Windsurf builds use ~/.codeium/windsurf/mcp_config.json.
mcp_config.json
{
"mcpServers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"]
}
}
}mcp_config.json, with a key file
{
"mcpServers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"env": {
"ASENTUM_KEY_FILE": "/Users/you/.asentum-mcp/testnet.key",
"ASENTUM_DRY_RUN": "1"
}
}
}
}Cascade also understands "${env:NAME}" and "${file:/path}" in values. Check: refresh the MCP list in the Cascade panel and look for asentum with its tools. Trouble: Cascade has a limit of 100 tools across all servers; switch off tools or servers you do not need. The newer Devin Local agent configures MCP servers in its own config instead, so this entry applies to Cascade.
OpenAI Codex CLI
Codex reads ~/.codex/config.toml (or .codex/config.toml in a project). Add it with one command:
codex mcp add asentum -- npx -y @asentum/mcp
# with a key file
codex mcp add asentum \
--env ASENTUM_KEY_FILE=/Users/you/.asentum-mcp/testnet.key \
--env ASENTUM_DRY_RUN=1 \
-- npx -y @asentum/mcpOr write the table yourself:
~/.codex/config.toml
[mcp_servers.asentum]
command = "npx"
args = ["-y", "@asentum/mcp"]
startup_timeout_sec = 30
# with a key file, add:
# env = { ASENTUM_KEY_FILE = "/Users/you/.asentum-mcp/testnet.key", ASENTUM_DRY_RUN = "1" }Check: codex mcp list, or type /mcp inside Codex. Trouble: the default startup timeout is 10 seconds, which the first npx download can exceed; startup_timeout_sec = 30 above gives it room.
Gemini CLI
Gemini CLI reads mcpServers from ~/.gemini/settings.json (all projects) or .gemini/settings.json (one project). Merge this into the existing file:
~/.gemini/settings.json
{
"mcpServers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"]
}
}
}~/.gemini/settings.json, with a key file
{
"mcpServers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"env": {
"ASENTUM_KEY_FILE": "/Users/you/.asentum-mcp/testnet.key",
"ASENTUM_DRY_RUN": "1"
},
"timeout": 60000
}
}
}Check: type /mcp in a session to see the connection and tools, or run gemini mcp list. Trouble: do not set "trust": true on this server: it skips the confirmation before every tool call, including the ones that spend.
Cline
In the Cline panel, click the MCP Servers icon in the top toolbar, open the Configure tab and click Configure MCP Servers. That opens cline_mcp_settings.json. (The Cline CLI keeps it at ~/.cline/data/settings/cline_mcp_settings.json.)
cline_mcp_settings.json
{
"mcpServers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"disabled": false,
"autoApprove": []
}
}
}cline_mcp_settings.json, with a key file
{
"mcpServers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"env": {
"ASENTUM_KEY_FILE": "/Users/you/.asentum-mcp/testnet.key",
"ASENTUM_DRY_RUN": "1"
},
"disabled": false,
"autoApprove": []
}
}
}Check: the server shows in the Installed list with a green dot and its tools. Trouble: keep deploy_contract, call_contract and send_ase out of autoApprove. For the HTTP mode, set "type": "streamableHttp" with the url; without it Cline assumes the older SSE transport.
Zed
Zed calls MCP servers context servers. Open your settings with the zed: open settings file command (or Settings, AI, MCP Servers) and add:
settings.json
{
"context_servers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"env": {}
}
}
}settings.json, with a key file
{
"context_servers": {
"asentum": {
"command": "npx",
"args": ["-y", "@asentum/mcp"],
"env": {
"ASENTUM_KEY_FILE": "/Users/you/.asentum-mcp/testnet.key",
"ASENTUM_DRY_RUN": "1"
}
}
}
}Check: in Settings, AI, MCP Servers, the dot next to asentum turns green ("Server is active"). Then use the Agent Panel. Trouble: Zed confirms tool calls by default. If you loosen agent.tool_permissions, keep mcp:asentum:deploy_contract, mcp:asentum:call_contract and mcp:asentum:send_ase on confirm.
Making a testnet key
Writes (deploy_contract, call_contract, send_ase) need a signing key. Give the agent its own testnet wallet, not the one you use day to day. The safest way is a key file: the key never appears in the client's config, in your shell history or in a screenshot of your settings.
1. Create a fresh testnet key. This writes a random 32-byte seed to .asentum-mcp/testnet.key in your home folder, readable only by you, and prints the full path. It refuses to overwrite a key that is already there. Works in macOS and Linux terminals, PowerShell and Command Prompt:
node -e "const fs=require('fs'),path=require('path'),dir=path.join(require('os').homedir(),'.asentum-mcp'),f=path.join(dir,'testnet.key');fs.mkdirSync(dir,{recursive:true});fs.writeFileSync(f,require('crypto').randomBytes(32).toString('hex'),{mode:0o600,flag:'wx'});console.log(f)"You can also use the 64 hex character seed of a new account you made in the Asentum browser extension: save it as the only content of that file instead.
2. Point the server at it with ASENTUM_KEY_FILE, using the full path the command printed (snippets below). An absolute path is safest; a leading ~/ also works.
3. Fund it with a little test ASE. Ask the agent "Show my Asentum wallet". get_wallet prints the ase1 address. Send it a few test ASE from your usual testnet wallet, or use the faucet (see Get Test ASE). A few ASE is plenty for deploys and calls.
Try a dry run first
ASENTUM_DRY_RUN=1 to the env while you get used to it. The server signs but never submits, so you can see exactly what the agent would send. Remove it when you are happy.Prefer not to use a file? ASENTUM_PRIVATE_KEY takes the 64 hex character seed directly. It works the same way, but the key then sits in plain text in the client's config file, so the key file is the better choice. If both are set, ASENTUM_PRIVATE_KEY wins.
Windows paths in JSON
C:\\Users\\you\\.asentum-mcp\\testnet.key) or use forward slashes (C:/Users/you/.asentum-mcp/testnet.key). In TOML, use single quotes for a literal Windows path.Example prompts
Some things to try once it is connected. Replace the ase1 address and the hash with your own.
Deploy an ARC-20 token
Create an ARC-20 token called Demo (DMO) with 1,000,000 supply and
18 decimals. Validate it, simulate a transfer, then deploy it to the
Asentum testnet and show me the token's ase1 address and receipts.Uses the create_arc20_token prompt, validate_contract, simulate_call and, with a key, deploy_contract.
Validate my contract
Validate the Asentum contract in contracts/counter.js and fix anything
it flags. Then simulate increment() from two different senders and
show me what ends up in storage.Runs on a local copy of the VM the nodes use. Nothing touches the chain and no key is needed.
Build a dapp frontend
Build a Next.js frontend for my contract at
ase1v0myp2de3dhj3crvkhxqlnjaw2mvp64a9efkpl with @asentum/connect:
a connect button, free reads of its view methods, and signed writes
that show "in block" and then "final".Uses the build_dapp_frontend prompt, get_contract for the real method names and the wallet connect docs.
Check a transaction's finality
Is Asentum transaction 0x<transaction hash> final yet? Wait until
it is, then tell me what it did and which events it emitted.Uses get_receipt with waitFor: "final" and get_transaction to decode it.
Using a client that is not listed? Any client that can start a stdio server works with command npx and arguments -y @asentum/mcp, and any streamable HTTP client works with the HTTP mode. See also Any MCP-capable agent.
Read next