agent-contacts
$
npx mdskill add aAAaqwq/AGI-Super-Team/agent-contactsManage MCP agent connections by adding, listing, or removing contacts.
- Enables agents to communicate with other agents via MCP URLs.
- Depends on Read, Write, Bash, and WebFetch tools for operations.
- Parses command-line arguments to determine add, list, or remove actions.
- Stores contact data in a local JSON file for persistent access.
SKILL.md
.github/skills/agent-contactsView on GitHub ↗
---
name: agent-contacts
description: AI agent contacts — add, list, remove MCP contacts. Use when someone gives an agent URL, or when you need to view/remove contacts.
disable-model-invocation: true
argument-hint: "[add|list|remove] [url-or-name]"
allowed-tools: Read, Write, Bash, WebFetch
---
# Agent Contacts
> Contact book for AI agents. Add an MCP address and your Claude Code can communicate with other agents.
## When to use
- `/agent-contacts add <url>` — add a new contact
- `/agent-contacts list` — show all contacts
- `/agent-contacts remove <name>` — remove a contact
- When someone gives you an agent/bot URL
## Paths
| What | Path |
|------|------|
| Contacts DB | `~/.claude/agent-contacts.json` |
## contacts.json format
```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"
}
]
```
## How to execute
Parse `$ARGUMENTS` to determine the command: first word is the command (`add`, `list`, `remove`), the rest is the argument.
### Add: `/agent-contacts add <url>`
```python
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:
```bash
claude mcp add <slug> --transport http <mcp_url>
```
Notify: "Contact `<name>` added. Restart Claude Code session to use their tools."
### List: `/agent-contacts list`
```python
import 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()
```
### Remove: `/agent-contacts remove <name-or-slug>`
```python
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:
```bash
claude mcp remove <slug>
```
Notify: "Contact `<name>` removed."
## How to share your address with others
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:
```bash
claude mcp add ivan-schedule --transport http https://your-agent.example.com/mcp/
```
## Important
- `agent-contacts.json` is created automatically on the first `add`
- Slug must be unique (used as MCP server name in Claude Code)
- MCP URL must end with `/` (trailing slash)
- After `add`, a **new session** of Claude Code is required for MCP tools to become available
- This skill has side effects (`claude mcp add/remove`), hence `disable-model-invocation: true`
## Related skills
- `deploy-website` — deploy page with instructions for new contacts
More from aAAaqwq/AGI-Super-Team
- a-fund-monitor监控 A 股基金实时估值与盘后净值,自动判断交易日并生成提醒或分析。
- account-executive>
- add-leadAdd company/person/relationship to CRM
- adsComprehensive ad account analysis across all major platforms (Google, Meta
- ads-agentAI-агент для управления Facebook рекламой. Вызывай для анализа, оптимизации, создания кампаний и отчётов.
- afrexai-compliance-auditRun internal compliance audits against major governance and security
- afrexai-personal-financeComplete personal finance system — budgeting, debt payoff, investing, tax optimization, net worth tracking, and financial independence planning. Use when managing money, building wealth, paying off debt, planning retirement, or optimizing taxes. Zero dependencies.
- after-salesUse when managing post-purchase experience, building customer loyalty, or increasing repeat purchases
- agent-model-switcher批量查看和切换子 agent 的模型配置,用于统一调整多 agent 的 provider/model 设置。
- agent-patternsFormat SPAWN REQUEST messages to launch parallel agents, generate structured agent status reports, and define communication protocols within the sprint system. Use when the user needs to coordinate multiple agents, format spawn requests, produce agent reports, or establish inter-agent communication patterns.