Claude Cursor Skill

agent-contacts

AI agent contacts — add, list, remove MCP contacts. Use when someone gives an agent URL, or when you need to view/remove contacts.

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download aaaaqwq-agi-super-team-skills_agent-contacts-cdb04e8.zip · 1 KB
Part of aaaaqwq/agi-super-team — 46 skills

Install

skills CLI npx skills add https://github.com/aAAaqwq/AGI-Super-Team/tree/main/skills/agent-contacts
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install aaaaqwq-agi-super-team@llmmart
Git git clone https://github.com/aAAaqwq/AGI-Super-Team.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole aaaaqwq/agi-super-team collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

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

[
  {
    "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>

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."

List: /agent-contacts list

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>

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."

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:

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
Files (agi-super-team)
  • SKILL.md 4.9 KB
    ---
    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
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related