Jake Shore e4a40298e4 Full cleanup: 65 servers compile clean, 15 new builds, TSC fixes across all existing servers
- Built from scratch: apollo, chargebee, datadog, greenhouse, lever, loom, pandadoc, salesloft, sendgrid, supabase, typeform, webflow, zoho-crm, twilio, reonomy
- TSC fixes: brevo, google-console, housecall-pro, meta-ads, rippling, bamboohr, close, fieldedge, freshdesk, helpscout, toast, touchbistro, hubspot, notion, quickbooks, airtable, gusto, intercom, linear, monday, salesforce, shopify, square, wave, xero
- Entry points added: close, touchbistro
- All 65 active servers compile with 0 TypeScript errors
- 4 specialty servers skipped (competitor-research, compliance-grc, n8n-apps, product-analytics)
2026-02-14 04:37:01 -05:00

99 lines
4.1 KiB
TypeScript

/**
* Owner-related MCP tools
*/
import { z } from 'zod';
import { ReonomyClient } from '../client/reonomy-client.js';
const ListPropertyOwnersSchema = z.object({
propertyId: z.string().describe('Unique Reonomy property ID'),
page: z.number().optional().describe('Page number for pagination (default: 1)'),
limit: z.number().optional().describe('Number of results per page (default: 25, max: 100)'),
offset: z.number().optional().describe('Offset for results (alternative to page)'),
});
const GetOwnerSchema = z.object({
ownerId: z.string().describe('Unique Reonomy owner ID'),
});
const SearchOwnersSchema = z.object({
name: z.string().optional().describe('Owner name or partial name to search'),
ownerType: z.string().optional().describe('Type of owner: individual, company, trust, llc, partnership, other'),
minProperties: z.number().optional().describe('Minimum number of properties owned'),
minValue: z.number().optional().describe('Minimum total value of properties owned in dollars'),
page: z.number().optional().describe('Page number for pagination (default: 1)'),
limit: z.number().optional().describe('Number of results per page (default: 25, max: 100)'),
offset: z.number().optional().describe('Offset for results (alternative to page)'),
});
export const ownerTools = [
{
name: 'list_property_owners',
description: `List all owners of a specific commercial property. Use this tool when you need to:
- Identify who owns a particular property
- Find ownership percentage for each owner in multi-owner properties
- Determine when each owner acquired their stake (acquisition date)
- Research ownership structure for due diligence
- Contact property owners for acquisition opportunities
Returns paginated list of owners associated with the property. Properties may have multiple owners with different ownership percentages.`,
inputSchema: ListPropertyOwnersSchema,
handler: async (client: ReonomyClient, args: z.infer<typeof ListPropertyOwnersSchema>) => {
const { propertyId, ...paginationParams } = args;
const result = await client.listPropertyOwners(propertyId, paginationParams);
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
{
name: 'get_owner',
description: `Retrieve detailed information about a specific property owner. Use this tool when you need:
- Complete owner profile including name and type (individual, company, trust, LLC, etc.)
- Contact information (email, phone, mailing address)
- Portfolio information - list of all properties owned
- Total number of properties and aggregate value of portfolio
- Owner entity classification for investment analysis
Ideal for researching major property holders, identifying acquisition targets, or understanding ownership patterns in a market.`,
inputSchema: GetOwnerSchema,
handler: async (client: ReonomyClient, args: z.infer<typeof GetOwnerSchema>) => {
const result = await client.getOwner(args.ownerId);
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
{
name: 'search_owners',
description: `Search for property owners across the Reonomy database. Use this tool when you need to:
- Find owners by name or company name
- Identify major property holders (filter by minimum property count)
- Discover high-net-worth owners (filter by minimum portfolio value)
- Research ownership entities of specific types (LLC, trust, corporation, etc.)
- Build target lists for investment marketing or acquisitions
- Track ownership patterns and consolidation trends
Returns paginated list of owners matching search criteria with portfolio statistics.`,
inputSchema: SearchOwnersSchema,
handler: async (client: ReonomyClient, args: z.infer<typeof SearchOwnersSchema>) => {
const result = await client.searchOwners(args);
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
};
},
},
];