| name | mcp-agent-connect |
| description | Connect to an AI agent via MCP using their mcp_url from CRM. Discovers capabilities via agent.json, registers MCP server, and enables tool-based communication. |
| allowed-tools | Read, Bash, WebFetch |
MCP Agent Connect
Look up an agent's MCP endpoint from CRM, discover their capabilities, register in Claude Code, and interact via tools.
When to use
- "Connect to [contact]'s agent"
- "What can [company]'s agent do?"
- "Book a meeting through [person]'s agent"
- A CRM contact has
mcp_url set and user wants to interact
- User provides a new agent URL to register
Paths
| What | Path |
|---|
| CRM Companies | $CRM_PATH/contacts/companies.csv |
| CRM People | $CRM_PATH/contacts/people.csv |
| Activities | $CRM_PATH/activities.csv |
How to execute
Step 1: Find mcp_url from CRM
Parse $ARGUMENTS for the contact name or company name.
import pandas as pd
name = "$1"
people = pd.read_csv('$CRM_PATH/contacts/people.csv')
match = people[
people['first_name'].str.contains(name, case=False, na=False) |
people['last_name'].str.contains(name, case=False, na=False)
]
companies = pd.read_csv('$CRM_PATH/contacts/companies.csv')
comp_match = companies[
companies['name'].str.contains(name, case=False, na=False)
]
if not match.empty and pd.notna(match.iloc[0].get('mcp_url')):
mcp_url = match.iloc[0]['mcp_url']
contact_name = f"{match.iloc[0]['first_name']} {match.iloc[0].get('last_name', '')}"
elif not comp_match.empty and pd.notna(comp_match.iloc[0].get('mcp_url')):
mcp_url = comp_match.iloc[0]['mcp_url']
contact_name = comp_match.iloc[0]['name']
else:
print(f"No mcp_url found for '{name}'. Add it to the contact's CRM record first.")
exit()
If the user provided a URL directly instead of a contact name, skip CRM lookup and use the URL.
Step 2: Discover agent capabilities
Use WebFetch to get the agent discovery endpoint:
URL: {base_url}/.well-known/agent.json
Where base_url = mcp_url with trailing /mcp/ removed.
Parse the response for:
name -- agent name
description -- what the agent does
capabilities -- dict of capability → {url, tools}
Show the user what this agent can do.
Step 3: Register MCP server
Generate a slug from the agent name:
import re
slug = re.sub(r'[^a-z0-9-]', '', name.lower().replace(' ', '-'))
Register in Claude Code:
claude mcp add <slug> --transport http <mcp_url>
Tell the user: "Agent {name} registered as {slug}. Restart your Claude Code session to use their tools."
Step 4: Log activity
After any MCP interaction, log to activities.csv:
import csv
from datetime import date
activity = {
'activity_id': f'act-mcp-{date.today().isoformat()}',
'person_id': person_id,
'company_id': company_id,
'type': 'message',
'channel': 'mcp',
'direction': 'outbound',
'subject': f'MCP interaction with {contact_name}',
'notes': 'Describe what tools were called and the outcome',
'date': str(date.today()),
'created_by': 'ai',
}
Update the contact's last_contact and last_updated fields.
Troubleshooting
| Problem | Solution |
|---|
| Tools not available after add | Restart Claude Code session |
| agent.json not found | Check URL, try {base_url}/.well-known/agent.json in browser |
| Connection timeout | Verify agent server is running and accessible |
| MCP URL returns 404 | Ensure URL ends with / (trailing slash) |
| No mcp_url in CRM | Ask user to provide the URL, then add it to the contact record |
Related skills
agent-contacts -- local agent phone book (add/list/remove without CRM)
log-activity -- log any communication to activities.csv
query-leads -- find CRM contacts, filter by mcp_url