From agi-super-team
Manages a contact book for AI agents: add, list, remove MCP contacts. Use when given an agent URL or to view/remove contacts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agi-super-team:agent-contacts [add|list|remove] [url-or-name][add|list|remove] [url-or-name]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Contact book for AI agents. Add an MCP address and your Claude Code can communicate with other agents.
Contact book for AI agents. Add an MCP address and your Claude Code can communicate with other agents.
/agent-contacts add <url> — add a new contact/agent-contacts list — show all contacts/agent-contacts remove <name> — remove a contact| What | Path |
|---|---|
| Contacts DB | ~/.claude/agent-contacts.json |
[
{
"name": "Your Name",
"slug": "ivan-schedule",
"mcp_url": "https://your-agent.example.com/mcp/",
"discovery_url": "https://your-agent.example.com/.well-known/agent.json",
"capabilities": ["scheduling"],
"description": "Scheduling agent for Your Name",
"added": "2026-02-26"
}
]
Parse $ARGUMENTS to determine the command: first word is the command (add, list, remove), the rest is the argument.
/agent-contacts add <url>import json, re
from datetime import date
from pathlib import Path
CONTACTS_FILE = Path.home() / ".claude" / "agent-contacts.json"
# 1. Load existing contacts
if CONTACTS_FILE.exists():
contacts = json.loads(CONTACTS_FILE.read_text())
else:
contacts = []
# 2. Normalize URL — $ARGUMENTS[1] is the URL
url = "$1".strip().rstrip("/")
if not url.endswith("agent.json"):
discovery_url = url + "/.well-known/agent.json"
else:
discovery_url = url
url = url.rsplit("/.well-known/agent.json", 1)[0]
# 3. Use WebFetch to get agent.json content, then parse:
# - name = agent_data["name"]
# - description = agent_data.get("description", "")
# - capabilities = list(agent_data.get("capabilities", {}).keys())
# - mcp_url = agent_data["capabilities"][first_cap]["url"]
# Ensure mcp_url ends with "/"
# 4. Generate slug
slug = re.sub(r"[^a-z0-9-]", "", name.lower().replace(" ", "-"))
# 5. Check for duplicates
if any(c["slug"] == slug for c in contacts):
print(f"Contact '{name}' already exists.")
else:
contacts.append({
"name": name,
"slug": slug,
"mcp_url": mcp_url,
"discovery_url": discovery_url,
"capabilities": capabilities,
"description": description,
"added": str(date.today()),
})
CONTACTS_FILE.write_text(json.dumps(contacts, indent=2, ensure_ascii=False))
After saving to JSON, run:
claude mcp add <slug> --transport http <mcp_url>
Notify: "Contact <name> added. Restart Claude Code session to use their tools."
/agent-contacts listimport json
from pathlib import Path
CONTACTS_FILE = Path.home() / ".claude" / "agent-contacts.json"
if not CONTACTS_FILE.exists():
print("No agent contacts yet. Use '/agent-contacts add <url>' to add one.")
else:
contacts = json.loads(CONTACTS_FILE.read_text())
if not contacts:
print("No agent contacts yet.")
else:
for i, c in enumerate(contacts, 1):
caps = ", ".join(c.get("capabilities", []))
print(f" {i}. {c['name']} ({c['slug']})")
print(f" MCP: {c['mcp_url']}")
print(f" Capabilities: {caps}")
print()
/agent-contacts remove <name-or-slug>import json
from pathlib import Path
CONTACTS_FILE = Path.home() / ".claude" / "agent-contacts.json"
target = "$1".strip().lower() # name or slug
contacts = json.loads(CONTACTS_FILE.read_text())
match = [c for c in contacts if c["slug"] == target or c["name"].lower() == target]
if not match:
print(f"Contact '{target}' not found.")
else:
slug = match[0]["slug"]
name = match[0]["name"]
contacts = [c for c in contacts if c["slug"] != slug]
CONTACTS_FILE.write_text(json.dumps(contacts, indent=2, ensure_ascii=False))
After removing from JSON, run:
claude mcp remove <slug>
Notify: "Contact <name> removed."
Simply send the link:
https://your-agent.example.com/.well-known/agent.json
If the person has this skill:
/agent-contacts add https://your-agent.example.com
If they don't have the skill -- one command:
claude mcp add ivan-schedule --transport http https://your-agent.example.com/mcp/
agent-contacts.json is created automatically on the first add/ (trailing slash)add, a new session of Claude Code is required for MCP tools to become availableclaude mcp add/remove), hence disable-model-invocation: truedeploy-website — deploy page with instructions for new contactsnpx claudepluginhub aaaaqwq/agi-super-team --plugin agi-super-teamConnects to an AI agent via MCP by looking up their mcp_url from CRM or accepting a direct URL. Discovers agent capabilities from agent.json, registers the MCP server, and logs interactions.
Provisions a real Ed25519-authenticated email address for AI agents (Claude, Cursor) with 27 MCP tools for send, receive, reply, contacts, search, and more via KeyID.ai.
Exchange information with active AI agents (Codex, Claude Code) using ai-devkit commands to list, inspect, and send messages between agents.