from __future__ import annotations
import argparse
import os
import sys
from pathlib import Path
def create_server(repo_path: str, key_path: str | None = None, key_str: str | None = None):
try:
from mcp.server.fastmcp import FastMCP
except ImportError:
print(
"Error: MCP server requires the 'mcp' extra.\n"
"Install with: pip install 'agent-vault[mcp]'",
file=sys.stderr,
)
sys.exit(1)
from agent_vault.vault import Vault
vault = Vault(
repo_path=repo_path,
key_path=key_path,
key_str=key_str,
auto_pull=True,
)
mcp = FastMCP("agent-vault")
@mcp.tool()
def agent_vault_get(secret: str) -> str:
return vault.get(secret)
@mcp.tool()
def agent_vault_list(group: str | None = None) -> str:
secrets = vault.list_secrets(group)
if not secrets:
return "No secrets found."
lines = []
for meta in secrets:
expires_str = ""
if meta.expires:
expires_str = f" expires={meta.expires.strftime('%Y-%m-%d')}"
lines.append(
f"{meta.name} group={meta.group} "
f"agents=[{', '.join(meta.authorized_agents)}] "
f"rotated={meta.rotated.strftime('%Y-%m-%d')}"
f"{expires_str}"
)
return "\n".join(lines)
return mcp
def main():
parser = argparse.ArgumentParser(
description="MCP server for agent-vault credential retrieval"
)
parser.add_argument(
"--repo",
default=os.getcwd(),
help="Path to the Git repository containing the vault (default: cwd)",
)
parser.add_argument(
"--key",
default=None,
help="Path to the agent's private key file",
)
args = parser.parse_args()
key_str = os.environ.get("AGENT_VAULT_KEY")
server = create_server(
repo_path=args.repo,
key_path=args.key,
key_str=key_str if not args.key else None,
)
server.run(transport="stdio")
if __name__ == "__main__":
main()