Tools & MCP integrations
At a glance
- 18 registered tools in the tool registry (
data/tool/tools.json) - MCP server mounted at
/mcpon the FastAPI app (streamable HTTP transport) - Single entry point:
ToolService.execute()→ factory → provider-specific implementation - Tools connect agents to ProjectX (TMS), LIA (ticket management), Atlas (address intelligence), and communication channels
Why this matters
Tools are how agents do things beyond generating text. When a WISMO agent fetches a shipment status, it calls fetch_information. When an address intelligence agent updates a score, it calls update_atlas_score. Understanding the tool registry tells you what an agent can and cannot do — and helps you scope new deployments.
The tool registry
All tools are defined in data/tool/tools.json. Each tool has an ID, name, type, description, and input schema.
| ID | Tool name | What it does |
|---|---|---|
| 13 | send_whatsapp_message_tool | Send WhatsApp messages via the communication engine |
| 18 | fetch_information | Fetch trip/consignment details from ProjectX |
| 22 | lia_post_comment | Post a comment to a LIA/Query Builder ticket |
| 26 | update_analysis | Update DIA result status in ProjectX |
| 30 | lia_update_ticket_status | Update ticket status (acknowledged, actionTaken, closed) |
| 32 | schedule_followup | Schedule a follow-up call/message, set opt-out or preferences |
| 33 | lia_update_ticket_custom_field | Update custom fields on LIA tickets |
| 40 | register_atlas_order | Register a consignment in Atlas (address intelligence) |
| 41 | update_atlas_status | Set resolution status on an Atlas address |
| 42 | update_atlas_score | Write confidence score + structured address to Atlas |
| 44 | update_consignment_address | Batch-update consignment addresses via ProjectX |
| 48 | object_action | Generic ProjectX object action (fetch, update, status change) |
| 105 | update_hub_state | Update hub rain mode state |
How tools work
- An agent node’s LLM decides to call a tool (via function calling).
ToolService.execute()looks up the tool in the registry.- Routes to the Python function implementation in
app/functions/. - The function calls the external system (ProjectX API, LIA API, Atlas, etc.).
- Result flows back to the agent as a tool response message.
Tool types
| Type | Description |
|---|---|
function | Python function tool — the standard type. Defined in app/functions/, registered in tools.json. |
external_safe | A function tool also exposed via MCP and the HMAC external API. Set external_safe: true in the tool definition. |
MCP server
The platform runs a Model Context Protocol server using FastMCP, mounted at /mcp on the main FastAPI app.
What it does
Exposes external_safe tools over streamable HTTP transport, allowing external AI systems (Claude Code, other agents, third-party integrations) to call platform tools without going through the full agent workflow.
How it works
- Auth: API key-based (
MCP_API_KEYenv var). Currently provisional — gated byALLOW_API_KEY_BASED_MCP_UNSAFE_FOR_PRODUCTIONflag. - Tool registration: All tools in
tools.jsonwithexternal_safe: trueare auto-registered on startup. - Dispatch: Uses the same
invoke_function_at_path()as the HMAC callback route. - Security: DNS rebinding protection, configurable allowed hosts/origins via
MCP_ALLOWED_HOSTS/MCP_ALLOWED_ORIGINS.
External integrations
| Integration | What the platform connects to | Tools involved |
|---|---|---|
| ProjectX | Shipsy’s main logistics platform — auth, consignment, trip, geocoding | fetch_information, update_consignment_address, object_action, update_analysis |
| LIA / Query Builder | Ticket management system | lia_post_comment, lia_update_ticket_status, lia_update_ticket_custom_field |
| Project Atlas | Address intelligence service | register_atlas_order, update_atlas_status, update_atlas_score |
| Communication providers | WhatsApp (Meta, Novomind, Twilio), SMS (Twilio, AWS SNS), Voice (ElevenLabs, ReachAll, LiveKit, Twilio), Email | send_whatsapp_message_tool, schedule_followup |
How to add a new tool
- Define the tool in
data/tool/tools.json— give it a unique ID, name, description, and JSON schema for inputs. - Implement the Python function in
app/functions/. Follow the pattern of existing tools (receive input dict, call external API, return result dict). - Mark as external (optional): set
external_safe: trueif the tool should be exposed via MCP and the HMAC API. - Assign the tool to agent nodes in a workflow definition — agents can only call tools explicitly assigned to them.
Sources
- agent-platform repo:
data/tool/tools.json - agent-platform repo:
app/mcp/server.py - agent-platform repo:
app/functions/ - See Architecture overview for how tools fit the platform
- See The agent-platform repo for the full directory structure
Changelog
- 26 May 2026: Full content from GitHub repo exploration. Tool registry, MCP server, integration mapping.