Add an MCP server configuration.
Quick setup for common MCP servers:
jarvis add github --key TOKEN
jarvis add filesystem
jarvis add slack --key TOKEN
Known servers: github, filesystem, slack, postgres, brave-search,
memory, puppeteer, google-maps
Source code in src/openjarvis/cli/add_cmd.py
| @click.command()
@click.argument("server_name")
@click.option("--key", default=None, help="API key or token for the server.")
@click.option(
"--args", "extra_args", default=None,
help="Additional arguments (comma-separated).",
)
def add(server_name: str, key: str | None, extra_args: str | None) -> None:
"""Add an MCP server configuration.
Quick setup for common MCP servers:
jarvis add github --key TOKEN
jarvis add filesystem
jarvis add slack --key TOKEN
Known servers: github, filesystem, slack, postgres, brave-search,
memory, puppeteer, google-maps
"""
console = Console(stderr=True)
template = _MCP_TEMPLATES.get(server_name)
if template is None:
console.print(f"[red]Unknown MCP server: {server_name}[/red]")
console.print("[dim]Known servers:[/dim]")
for name, tmpl in _MCP_TEMPLATES.items():
console.print(f" [cyan]{name}[/cyan] — {tmpl['description']}")
sys.exit(1)
# Build server config
config = {
"command": template["command"],
"args": list(template["args"]),
}
# Add extra args
if extra_args:
config["args"].extend(a.strip() for a in extra_args.split(","))
# Handle API key
env = {}
env_key = template["env_key"]
if env_key:
if key:
env[env_key] = key
else:
console.print(
f"[yellow]Tip: Pass --key to set {env_key},"
" or set it as an environment variable.[/yellow]"
)
if env:
config["env"] = env
# Save to MCP config dir
_MCP_CONFIG_DIR.mkdir(parents=True, exist_ok=True)
config_file = _MCP_CONFIG_DIR / f"{server_name}.json"
config_file.write_text(json.dumps(config, indent=2))
console.print(
f"[green]Added MCP server: {server_name}[/green]\n"
f" Config: {config_file}\n"
f" Description: {template['description']}"
)
if env_key and not key:
console.print(f" [dim]Set {env_key} env var or re-run with --key[/dim]")
|