feat: add get_deals_rich tool, enrich list_firms

- get_deals_rich: full deal export with tombstone text, quote, attachments,
  fee structure, multiples, co-advisory info. Date range optional.
- list_firms: now returns Summary, Countries, EquityPartnerName
This commit is contained in:
Spaike 2026-05-08 17:42:04 +02:00
parent ebe1c78ef1
commit 7f7c67b9b4
2 changed files with 45 additions and 2 deletions

View File

@ -84,7 +84,8 @@ Restart Claude Desktop.
| `get_member_detail` | Full profile of a single network member | | `get_member_detail` | Full profile of a single network member |
| `list_deal_stages` | Available deal stages | | `list_deal_stages` | Available deal stages |
| `list_industries` | Industry classifications | | `list_industries` | Industry classifications |
| `list_firms` | Firms visible to your account | | `list_firms` | Firms visible to your account (with summary, countries, equity partner) |
| `get_deals_rich` | Full deal dataset including tombstone narrative, fee structure, multiples, attachments list |
--- ---

View File

@ -302,10 +302,42 @@ async def list_tools() -> list[types.Tool]:
description=( description=(
"Returns the firms visible to the current user: " "Returns the firms visible to the current user: "
"their own firm plus all firms that have at least one deal shared with the network. " "their own firm plus all firms that have at least one deal shared with the network. "
"Each firm includes a summary description, countries of activity, and equity partner info."
), ),
inputSchema={"type": "object", "properties": {}, "required": []}, inputSchema={"type": "object", "properties": {}, "required": []},
), ),
types.Tool(
name="get_deals_rich",
description=(
"Returns a rich dataset of deals using the portal's export engine. "
"Includes fields NOT available in list_deals:\n"
"- TransactionTitle and TransactionDescription: the tombstone narrative text\n"
"- Quote and QuoteAuthor: a client or deal quote\n"
"- DealAttachments: list of attached document filenames\n"
"- SuccessFee, FeeShare: fee structure\n"
"- Multiple, MultipleOverride: valuation multiples\n"
"- CoAdvisory, OtherFirmInDeal, OtherFirmInvolved: network co-advisory relationships\n"
"- Financing-specific fields (PurposeOfFinancing, TypeOfLending, etc.)\n\n"
"Confidential financial values are masked. HTML is stripped from narrative fields.\n\n"
"Use this when you need the full deal narrative, tombstone text, or fee/multiple data. "
"Use list_deals for quick filtered searches."
),
inputSchema={
"type": "object",
"properties": {
"date_from": {
"type": "string",
"description": "Start of date range (YYYY-MM-DD). Defaults to 5 years ago.",
},
"date_to": {
"type": "string",
"description": "End of date range (YYYY-MM-DD). Defaults to today.",
},
},
},
),
types.Tool( types.Tool(
name="list_members", name="list_members",
description=( description=(
@ -527,6 +559,16 @@ async def call_tool(name: str, arguments: dict) -> list[types.TextContent]:
result = await _get("/firms") result = await _get("/firms")
return await respond(result) return await respond(result)
# ------------------------------------------------------------------
elif name == "get_deals_rich":
params: dict[str, Any] = {}
if arguments.get("date_from"):
params["date_from"] = arguments["date_from"]
if arguments.get("date_to"):
params["date_to"] = arguments["date_to"]
result = await _get("/deal-export", params)
return await respond(result)
# ------------------------------------------------------------------ # ------------------------------------------------------------------
elif name == "list_members": elif name == "list_members":
params: dict[str, Any] = {} params: dict[str, Any] = {}