An MCP server that integrates Gmail, OpenAI, and Salesforce to automate customer email processing workflows, including email retrieval, AI-powered customer information extraction, reply generation, and Salesforce lead creation.
FastMCP Sales Assistant has 11 tools with basic schemas and descriptions in Korean. All tools have input schemas with type definitions and descriptions present. However, descriptions are often generic or lack actionable context for LLM selection. Parameter descriptions are minimal (avg ~30 chars). No output schemas documented. Error handling returns status/message but lacks recovery guidance. Tool naming follows verb_noun pattern (fetch_, send_, get_, create_, analyze_, generate_, verify_, check_, process_) which is good. Critical issue: process_customer_email_workflow combines 4 distinct operations (extract → create lead → generate reply → send email) violating single-responsibility principle. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Descriptions lack WHEN/WHY context needed for LLM selection.
AI를 사용하여 이메일에서 고객 정보를 추출합니다.
모든 서비스의 현재 상태를 확인합니다.
Salesforce에 새로운 Lead를 생성합니다.
최근 받은 이메일을 조회합니다 (자신이 보낸 이메일 제외).
고객 정보를 바탕으로 AI가 답변 이메일을 생성합니다.
Gmail 서비스 상태를 확인합니다.
OpenAI 서비스 상태를 확인합니다.
process_customer_email_workflow violates single-responsibility principle: combines email analysis + lead creation + reply generation + email sending. Should be split into 4 separate tools (analyze_email, create_lead, generate_reply, send_reply) so agent can compose them independently.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. E.g., fetch_unread_emails returns email list but structure of email objects is undocumented. generate_email_reply returns {subject, body} but this is inferred, not declared.
Parameter descriptions are minimal and lack actionable constraints. E.g., 'minutes_ago' has description '몇 분 전부터 조회할지 (기본값: 10분)' but no min/max bounds. 'max_results' lacks range (1-100?). LLMs cannot validate inputs without explicit constraints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Salesforce 서비스 상태를 확인합니다.
고객 이메일 처리 전체 워크플로우를 실행합니다. 1. AI로 고객 정보 추출 2. 정보가 완전하면 Salesforce Lead 생성 3. AI로 답변 생성 4. 답변 이메일 발송
이메일 답장을 보냅니다.
Salesforce에서 Lead 정보를 확인합니다.
Tool descriptions lack WHEN/WHY context. E.g., 'AI를 사용하여 이메일에서 고객 정보를 추출합니다' (Extract customer info using AI) does not explain when to call this vs other tools, what happens if info is incomplete, or what the agent should do next. Descriptions should guide LLM selection.
Error handling returns generic status/message but lacks recovery guidance. E.g., 'AI 분석 중 오류 발생' (AI analysis error occurred) tells LLM nothing about retry eligibility, user action needed, or next steps. Should follow pattern: 'Error: [reason]. Try: [recovery action]'.