- TypeScript 89.9%
- JavaScript 9.4%
- Nix 0.6%
- Dockerfile 0.1%
Enables installation via nix with: - nix build (builds the package) - nix develop (development shell with nodejs and pnpm) Can be consumed as a flake input in NixOS/home-manager configs. |
||
|---|---|---|
| .changeset | ||
| .github | ||
| .husky | ||
| bin | ||
| scripts | ||
| skills | ||
| src | ||
| tests | ||
| ts-sdk@5360d261e1 | ||
| typescript-sdk@a5670de388 | ||
| .gitignore | ||
| .gitmodules | ||
| .prettierrc | ||
| AGENTS.md | ||
| build.config.mjs | ||
| CHANGELOG.md | ||
| flake.lock | ||
| flake.nix | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.json | ||
CVMI (wip)
ContextVM Interface (CVMI) is a CLI tool that allows you to navigate and use the ContextVM protocol. It provides a set of tools and skills to help you interact, and implement the protocol.
Note: This project is a fork of the
skillsCLI by Vercel Labs.
Quick Start
# Install ContextVM skills interactively
npx cvmi add
# Install a specific skill from the ContextVM repository
npx cvmi add --skill overview
Roadmap
cvmi add- Install skills with interactive pickercvmi add --skill <name>- Install specific skillscvmi serve- Expose a server (gateway)cvmi use- Use a server from nostr as stdio (proxy)cvmi cn- Compile a server to code (ctxcn)cvmi call- Call methods from a servercvmi inspect- Inspect server schema
Configuration
Configuration is stored in JSON format with the following priority:
- CLI flags (highest priority)
- Custom config:
--config <path> - Project-level:
./.cvmi.json - Global:
~/.cvmi/config.json - Environment variables
Global config path: ~/.cvmi/config.json (separate from ~/.agents/ used for skills)
Nostr MCP environment variables:
CVMI_SERVE_*/ legacyCVMI_GATEWAY_*for serve/gateway settingsCVMI_USE_*/ legacyCVMI_PROXY_*for use/proxy settings
Additional serve env vars:
CVMI_SERVE_URL/CVMI_GATEWAY_URLto set the remote Streamable HTTP MCP server URL
Logging environment variables (SDK-level):
The underlying @contextvm/sdk uses these env vars to control logging:
| Variable | Values | Description |
|---|---|---|
LOG_LEVEL |
debug, info, warn, error, silent |
Minimum log level to output (default: info) |
LOG_DESTINATION |
stderr, stdout, file |
Where to write logs (default: stderr) |
LOG_FILE |
path string | Path to log file (used when LOG_DESTINATION=file) |
LOG_ENABLED |
true, false |
Disable all logging with false (default: true) |
Example: Run serve with debug logging to a file
LOG_LEVEL=debug LOG_DESTINATION=file LOG_FILE=./cvmi.log cvmi serve -- npx -y @modelcontextprotocol/server-filesystem /tmp
Example: Run use with only warnings and errors
LOG_LEVEL=warn cvmi use npub1q...
Example global config (~/.cvmi/config.json):
{
"serve": {
"url": "https://my.mcp.com/mcp",
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "."],
"privateKey": "nsec1...",
"relays": ["wss://relay.damus.io"],
"public": false,
"encryption": "optional"
},
"use": {
"privateKey": "nsec1...",
"relays": ["wss://relay.damus.io"],
"serverPubkey": "npub1...",
"encryption": "optional"
}
}
Note: For serve, you should configure either serve.url (remote Streamable HTTP MCP server) or serve.command/serve.args (spawn local stdio MCP server).
About quoting commands
cvmi serve spawns the MCP server directly (no shell). Prefer passing the command and its arguments as separate tokens:
cvmi serve -- npx -y @modelcontextprotocol/server-filesystem /tmp
If you accidentally pass a full command as a single quoted string (e.g. "npx -y ..."), cvmi will split it into an executable + args for you.
Passing environment variables to the spawned MCP server
Use --env / -e (repeatable):
cvmi serve -e LOG_LEVEL=debug -- npx -y @modelcontextprotocol/server-filesystem /tmp
You can also set it in config under serve.env.
Note: The CLI auto-generates a private key if none is provided. Keys can be specified in hex format (with or without 0x prefix) or NIP-19 bech32 format (nsec1... for private keys, npub1... for public keys).
License
MIT