@iriseller/mcp-server
Version:
Model Context Protocol (MCP) server providing access to IRISeller's AI sales intelligence platform with 7 AI agents, multi-CRM integration, advanced sales workflows, email automation, Rosa demo functionality with action scoring, DNC compliance checking, G
122 lines (121 loc) • 4.14 kB
JavaScript
import { z } from 'zod';
// Base types for IRISeller data structures
export const LeadSchema = z.object({
id: z.string(),
name: z.string(),
email: z.string().optional(),
company: z.string(),
title: z.string().optional(),
phone: z.string().optional(),
status: z.string().optional(),
industry: z.string().optional(),
source: z.string().optional(),
score: z.number().optional(),
});
export const OpportunitySchema = z.object({
id: z.string(),
name: z.string(),
amount: z.number().optional(),
stage: z.string(),
probability: z.number().optional(),
closeDate: z.string().optional(),
accountId: z.string().optional(),
ownerId: z.string().optional(),
});
export const ContactSchema = z.object({
id: z.string(),
name: z.string(),
email: z.string().optional(),
phone: z.string().optional(),
title: z.string().optional(),
accountId: z.string().optional(),
department: z.string().optional(),
});
export const CompanySchema = z.object({
name: z.string(),
industry: z.string().optional(),
size: z.string().optional(),
website: z.string().optional(),
location: z.string().optional(),
revenue: z.string().optional(),
});
// Agent execution types
export const AgentExecutionRequestSchema = z.object({
agent_name: z.enum([
'rosa_sdr',
'prospecting',
'personalization',
'sequence',
'social_selling',
'nurturing',
'objection_handling'
]),
input_data: z.record(z.any()),
options: z.object({
timeout: z.number().optional(),
priority: z.enum(['low', 'medium', 'high']).optional(),
include_research: z.boolean().optional(),
}).optional(),
});
export const WorkflowExecutionRequestSchema = z.object({
workflow_type: z.enum([
'full_sdr_workflow',
'account_based_prospecting',
'lead_qualification_enhancement',
'outreach_sequence_creation',
'social_selling_campaign',
'lead_nurturing_setup'
]),
input_data: z.record(z.any()),
agents_to_include: z.array(z.string()).optional(),
options: z.object({
timeout: z.number().optional(),
priority: z.enum(['low', 'medium', 'high']).optional(),
}).optional(),
});
// CRM query types
export const CRMQuerySchema = z.object({
entity_type: z.enum(['leads', 'opportunities', 'contacts', 'accounts']),
filters: z.union([
z.record(z.any()), // Object format: {quarter: "Q4"}
z.array(z.object({ field: z.string(), value: z.any() })) // Array format: [{field: "quarter", value: "Q4"}]
]).optional().transform((filters) => {
// Convert array format to object format if needed
if (Array.isArray(filters)) {
const obj = {};
filters.forEach(filter => {
obj[filter.field] = filter.value;
});
return obj;
}
return filters;
}),
limit: z.number().min(1).max(100).default(10),
offset: z.number().min(0).default(0),
sort_by: z.string().optional(),
sort_order: z.enum(['asc', 'desc']).default('desc'),
});
// Research types
export const CompanyResearchRequestSchema = z.object({
company_name: z.string(),
industry: z.string().optional(),
research_depth: z.enum(['basic', 'comprehensive', 'competitive']).default('basic'),
include_competitors: z.boolean().default(false),
include_news: z.boolean().default(true),
include_financials: z.boolean().default(false),
});
// Personalization types
export const PersonalizationRequestSchema = z.object({
prospect_data: z.object({
name: z.string(),
company: z.string(),
title: z.string().optional(),
industry: z.string().optional(),
email: z.string().optional(),
linkedin_url: z.string().optional(),
}),
message_type: z.enum(['email', 'linkedin', 'phone_script', 'sequence']),
tone: z.enum(['professional', 'casual', 'consultative', 'friendly']).default('professional'),
objectives: z.array(z.string()).optional(),
context: z.string().optional(),
});