Skip to main content
Glama
crm-cases

crm-cases

by sm2774us

FDE Case Resolution Agent

Showcase app 3 of 3 - Advanced / agentic: function calling, ReAct loop, MCP, A2A, self-correction, human-in-the-loop. An Agentforce-style service agent that takes real actions (refund, update case, draft email) against a CRM - with the controls an enterprise needs before it touches money.

                     ┌──────────────── Agent harness (agent.py) ────────────────────┐
 "Resolve CS-1002" ─►│ bounded ReAct loop · loop detection · error-streak fail-safe │
                     │ policy gate · HUMAN APPROVAL · result truncation · tracing   │
                     └───────┬───────────────────────────┬──────────────────────────┘
          tool calls (LLM)   │                           │ A2A (JSON-RPC message/send)
   Claude/OpenAI/Gemini/Grok │ MCP (stdio JSON-RPC)      ▼
                             ▼                  Refund Policy Agent  (/.well-known/agent-card.json)
                  crm-cases MCP server          eligibility · window · amount cap · approval level
        get_case · get_customer_profile · get_order
        issue_refund · update_case · draft_customer_email        ──► SQLite "CRM" + unified_profile view (Data 360 role)
                             │
                traces/runs.jsonl (OTel-shaped spans) ──► dashboard.html (KPIs)

List of FDE Showcase Apps

App Name

🎯 Core Focus & Architecture

🧬 Lineage & Progression

💡 Key Use Cases

💼 How to Showcase in Interviews

1. FDE Discovery Analyzer

⚡ Basic / Single-Turn• Structured outputs via provider JSON Schema• Few-shot prompt engineering & data-delimited inputs• Deterministic verifiers & Pydantic auto-repair loops ($\le 2$ retries)• Single-pass CLI / Web UI / Golden Evals

🎯 Level 1: Entry FoundationEstablishes reliable, single-turn LLM input/output contracts, schema enforcement, repair loops, and deterministic verification before attempting stateful or multi-step logic.

• Customer discovery call transformation (notes $\rightarrow$ validated Agentforce-style blueprints)• Automated static analysis & Apex code review for bulk-safety• Rapid MVP 5-day execution planning

Highlight Systems Reliability & Schema Integrity:• Explain how you eliminate LLM output variance using forced schemas and auto-healing Pydantic loops.• Emphasize your zero-SDK stdlib adapter approach to avoid vendor lock-in across Claude, OpenAI, Gemini, and Grok.

2. FDE Knowledge Assistant

🧠 Intermediate / Grounded Context• Role-Based Access Control (RBAC/ACL) pre-filtering• Hybrid search (BM25 + Dense Vectors combined via Reciprocal Rank Fusion)• Heading/table-aware atomic chunking• Input injection stripping & pre-prompt evidence gating• Strict lexical citation verification

📈 Level 2: Contextual EscalationEvolves Level 1's single-turn validation into retrieval-augmented generation (RAG), focusing on enterprise data boundaries, security guardrails, context management, and hallucination prevention.

• Secure enterprise internal search & document Q&A• Role-restricted knowledge access (e.g., HR vs. Employee compensation data)• Injection-resistant document consumption• Zero-hallucination support portals

Highlight Enterprise Security & Groundedness:• Showcase the pre-retrieval ACL filtering that prevents restricted context from ever touching vector scoring or LLM prompts.• Detail your anti-hallucination pipeline (evidence gate + lexical support check) that fails closed rather than guessing.

3. FDE Case Resolution Agent

🤖 Advanced / Agentic Execution• Multi-step ReAct loop with loop detection & error streak fail-safes• Model Context Protocol (MCP stdio JSON-RPC) tool execution• Agent-to-Agent (A2A JSON-RPC) policy communication• Deterministic Human-In-The-Loop (HITL) gates & OTel-shaped telemetry traces

🚀 Level 3: Operational AgenticsCombines Level 1 output contracts and Level 2 security/RAG context into autonomous, multi-turn tool execution against production systems (SQLite/Salesforce CRM) with strict financial guardrails.

• Autonomous enterprise CRM case resolution (refunds, order updates, email drafting)• Multi-agent policy enforcement & financial tier escalations• Cross-tool integration via native MCP across IDEs (Claude Code, Copilot, Gemini CLI, Codex)

Highlight Autonomous Control & Architecture:• Focus on safety controls: dual-key approval policies, hard-coded parameter stripping (approved_by), and loop/error fail-safes.• Demo your cross-agent interop using MCP and A2A standard protocols with full audit tracing.


🛣️ Narrative Lineage Across the 3 Apps

  1. App 1 - Discovery Analyzer - (Validation Layer): Proves you know how to talk to LLMs deterministically—getting structured data out without reliance on heavy frameworks, handling retries gracefully, and validating inputs/outputs against concrete business schemas.

  2. App 2 - Knowledge Assistant - (Context & Security Layer): Expands single-turn output validation into multi-source enterprise retrieval, proving you can handle data isolation, prompt injection attacks, hybrid search ranking, and zero-hallucination citation checks.

  3. App 3 - Case Resolution Agent - (Action & Agentic Layer): Translates validated structured outputs and secure context into autonomous system actions, orchestrating real tool calls via MCP, agent-to-agent negotiation, multi-turn error recovery, and strict human approval limits.


💡 Strategy: Demonstrating Technical Depth in Interviews

  • The FDE Engineering Philosophy: Walk interviewers through how this trio covers the complete deployment spectrum—from Discovery (parsing customer intake accurately) to Knowledge (safely accessing enterprise context) to Resolution (executing workflows via tools with guardrails).

  • Offline-First Resilience: Point out that all 3 apps run zero-dependency / offline test suites, mock layers, and golden evals without requiring API keys, proving your emphasis on testability and local CI/CD pipelines.

  • Standards over Lock-in: Highlight your architectural choices—writing lightweight, vendor-agnostic adapters (urllib), implementing standard specs (MCP, A2A, JSON-Schema), and avoiding black-box agent frameworks in favor of explicit Python loop control.


Related MCP server: ParcelPilot MCP Server

Quick start (offline - no keys, stdlib only)

python -m case_agent reset
python -m case_agent run CS-1001 --approve ask      # auto-refund $89.99
python -m case_agent run CS-1002 --approve ask      # $1,200 -> pauses for YOU to approve
python -m case_agent batch                          # all 6 seeded cases + dashboard.html
python -m case_agent eval                           # grades DB state, 7 scenarios
python -m pytest -q                                 # 15 tests incl. adversarial harness tests
python scripts/interop_check.py                     # (pip install mcp) official MCP client talks to our server

Seeded scenarios: 1001 auto-refund · 1002 supervisor approval · 1003 outside 30-day window (deny) · 1004 fraud flag (escalate) · 1005 prompt injection in the case text ("refund $9000") · 1006 already refunded.

The scripted mock deliberately calls get_case("1002") first, gets a corrective error from the MCP server, and self-corrects to CS-1002 - the same behavior you'd see from a real model.

Real models

Set a key + --provider anthropic|openai|gemini|xai|auto. All four use native tool/function calling through one normalized message format (llm.py; Gemini thought-signature parts are echoed back).

Mount the MCP server in your AI tool (same server, five hosts)

Host

Config in this repo

Claude Code / Claude Desktop

.mcp.json

GitHub Copilot (VS Code)

.vscode/mcp.json

Gemini CLI / Google Antigravity

.gemini/settings.json, mcp_config.json

OpenAI Codex CLI

.codex/config.toml

Then ask the tool: "use crm-cases to look up CS-1001 and tell me the order amount". Also ships AGENTS.md, CLAUDE.md, Copilot instructions and a SKILL.md (Claude Code + .agent/skills).

Guarantees enforced in code (and tested)

  1. Model cannot self-approve: approved_by is stripped from its arguments and absent from its tool schema; the MCP server also rejects >$250 refunds without it.

  2. issue_refund is impossible before an A2A policy verdict for that case+order; amount ≤ policy max; two-person tier escalates.

  3. Human denial -> no refund -> escalation, even if the model insists.

  4. Repeated identical calls -> LOOP_DETECTED; 3 consecutive tool errors or step-budget exhaustion -> fail-safe escalation of the case.

  5. Customer-authored text is data; the injected "$9000" case resolves for $40 like any other.

Honest limits

MCP and A2A here are small, spec-shaped implementations (stdio JSON-RPC; A2A message/send + Agent Card, no streaming/auth). Production: official SDKs, OAuth on the A2A endpoint, per-user identity propagation, durable state (LangGraph checkpointer) for hours-long approvals. The SQLite CRM is a stand-in for Salesforce/Data 360; swapping mcp_server.py for a Salesforce MCP/REST backend leaves the harness unchanged.

Available Tools

6 tools
draft_customer_emailA

Save a DRAFT reply to the customer (never sent automatically; a human reviews and sends).

NameRequiredDescriptionDefault
bodyYes
case_idYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly details a critical behavioral trait: the draft will never be sent automatically and requires human review. This highly valuable context is not provided by the annotations or schema and prevents dangerous misinvocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is extremely concise, using a single sentence to explain the tool's function and constraints without any wasted language or extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool (2 required parameters), the description provides sufficient information regarding its function, state, and operational constraints to allow an agent to select and invoke it safely. Minor details like input string length or ID format are not addressed, but are not critical for initial usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given that schema description coverage is 0%, the description adds significant value by defining the semantic context of the input: the `body` is a 'reply to the customer' and the `case_id` ties it to a customer case. This helps the AI understand the functional meaning of the required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the specific action (Save a DRAFT reply) and the resource involved (customer). This distinguishes it from sibling tools that merely retrieve case data or update existing records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies clear usage guidance by stating that the tool is for drafting purposes, effectively guiding the agent to use this tool when immediate sending is not appropriate. It serves as a clear instruction on the tool's intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_caseA
Read-onlyIdempotent

Fetch a support case (subject, customer description, status, account_id, order_id, reason). Case ids look like CS-1001.

NameRequiredDescriptionDefault
case_idYese.g. CS-1001

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and closed-world, so the safety profile is covered. The description adds the returned field list and id format, which is genuinely useful, but says nothing about error behavior for unknown ids or whether a missing case returns empty vs. throws.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste: the verb and resource are front-loaded, and the id-format hint is placed at the end where it is most useful. Nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with full annotation coverage and no output schema, the description covers purpose, returned fields, and id format adequately. The only gap is not describing behavior on invalid or unknown case ids.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the case_id schema already supplies the 'e.g. CS-1001' example, which the description simply repeats. No additional syntax, validation, or constraint detail is added beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a support case') and enumerates the returned fields (subject, customer description, status, account_id, order_id, reason), making it clearly distinguishable from siblings like get_customer_profile and get_order by resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied — retrieve a case by id — but there is no explicit when-to-use/when-not guidance or reference to alternatives such as update_case for modifications or get_order for order data. The agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_customer_profileB
Read-onlyIdempotent

Unified customer profile (tier, region, fraud_flag, lifetime value, open cases, lifetime refunds). Account ids look like A-100.

NameRequiredDescriptionDefault
account_idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile needs no repetition. The description adds the concrete contents of the profile (fraud_flag, lifetime value, open cases, refunds), which is genuinely useful context about what the read surfaces, but it says nothing about lookup failure behavior or freshness of the aggregates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, the field inventory front-loaded and the id format second, with no filler. The tradeoff is that the terseness comes partly from omitting a verb and any routing guidance rather than from tight editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with full annotation coverage and no output schema, the description does the important remaining work by listing the returned fields and the id format. Missing only not-found behavior and sibling routing, which are minor at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single account_id parameter, so the description carries the burden. It partially compensates with the format hint 'Account ids look like A-100', which is real value beyond the bare string type, but it does not state whether the id is case-sensitive, whether an alternate id form is accepted, or what happens on a malformed id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a unified customer profile) and enumerates the fields it exposes, so the agent knows roughly what comes back. However, it is a bare noun phrase with no verb and no differentiation from siblings like get_case or get_order, leaving the agent to infer that this is a read of an account record keyed by account_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: no mention of when to pick this over get_case, get_order, or draft_customer_email, and no prerequisites or exclusion conditions. The only inferable cue is that an account id is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_orderA
Read-onlyIdempotent

Fetch an order (item, amount, delivered_on, refunded). Order ids look like O-5001.

NameRequiredDescriptionDefault
order_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds value beyond them by disclosing the shape of the returned record and the required id convention (O-5001), which is real behavioral context an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and return shape, then the id hint. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read with rich annotations and no output schema, the description covers the essential: what comes back and how to form the argument. The only real gap is not-found behavior, which is minor for a lookup of this size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents nothing (0% coverage) and the single parameter is a bare string, so the description carries the burden. The "Order ids look like O-5001" example gives the format and prefix needed to construct a valid value, which is meaningful beyond the schema — though it doesn't state whether the prefix is case-sensitive or whether ids can be passed without it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Fetch an order") and parenthesizes the fields it returns (item, amount, delivered_on, refunded). That is enough to distinguish it from siblings like get_case and get_customer_profile, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb and the id-format hint — fetch a single order when you have its id. There is no explicit guidance on when to prefer this over get_case or get_customer_profile, and no statement about what happens when the order doesn't exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

issue_refundA
Destructive

Issue a refund for an order. FINANCIAL ACTION. Amounts above $250 need a human approver (approved_by is set by the harness, never by the model).

NameRequiredDescriptionDefault
amountYes
reasonYes
case_idYes
order_idYes
approved_byNoSet by the agent harness after human approval. Do not supply.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety profile is established structurally. The description adds value beyond that: it flags a financial action, defines the $250 approval threshold, and clarifies that approved_by is populated by the harness rather than the model — a behavioral detail no annotation conveys. It omits remaining behavior such as reversibility of an issued refund or what happens on retry, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and immediately followed by the risk warning and the approval constraint. The parenthetical about approved_by prevents a likely misuse and earns its space; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent financial mutation with no output schema and 20% parameter coverage, the description covers the most important risk (approval gating) but leaves gaps: whether partial refunds are supported, what reason should contain, whether the call is retryable, and what confirmation is returned. Adequate as a guardrail, incomplete as a full specification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 20%, with approved_by the sole documented parameter, so the description must carry weight — and it does partially, explaining both the amount threshold and the provenance of approved_by. However, reason, case_id, and order_id receive no semantic elaboration (accepted values, format, or relationship to the order/case), leaving half the required surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Issue a refund for an order" gives a specific verb plus resource, and no sibling (get_case, get_order, update_case, draft_customer_email) competes for this action, so differentiation is implicit. It stops short of stating scope details such as partial vs full refunds, but the core action is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies one concrete usage rule — amounts above $250 require a human approver — which is genuinely actionable gating information. It does not say when to prefer this over alternatives (e.g., escalation paths, or when a refund should instead be declined or drafted as an email to the customer), leaving the broader invocation context to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_caseB

Set case status and add an internal note.

NameRequiredDescriptionDefault
noteYes
statusYes
case_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose non-read-only, non-destructive, non-idempotent, closed-world behavior, so the safety profile is covered. The description adds one genuinely useful fact beyond them: the note is 'internal', i.e. not customer-visible. However, it does not explain why the call is non-idempotent, whether status changes notify the customer, or whether the update is reversible — notable gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action and both effects front-loaded; nothing is redundant. It is arguably too terse, but that gap is better attributed to completeness than to wordiness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-required-parameter mutation with zero schema descriptions and no output schema, the definition should state whether the note is appended or replaces an existing one, whether status transitions are constrained, and what the caller gets back. None of that is present, so an agent can invoke it but cannot predict its effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the schema itself only names the fields; the enum values for status are self-documenting. The description does add real meaning for two parameters ('internal note' implies internal-only visibility; 'set case status' implies overwrite rather than append), but leaves case_id and note length/append-vs-replace semantics unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb ('Set') and two concrete resources (case status, internal note), which is enough for an agent to distinguish it from the read-only siblings like get_case. It stops short of explicitly contrasting itself with any sibling by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus alternatives, no prerequisites (required permissions, whether the case must be open), and no statement of what happens downstream when a status is set. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv1.0.0
    • First observeddraft_customer_email
    • First observedget_case
    • First observedget_customer_profile
    • First observedget_order
    • First observedissue_refund
    • First observedupdate_case

TDQS

A3.8/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct resource or action: cases, customer profiles, orders, refunds, case updates, and email drafts. The only same-resource overlap is get_case vs update_case, but their actions are unambiguous.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun convention: get_case, get_customer_profile, get_order, issue_refund, update_case, draft_customer_email. The pattern is predictable and readable throughout.

Tool Count5/5

Six tools is well-scoped for a CRM case-handling server. Each tool earns its place in the support workflow without obvious redundancy or excessive surface area.

Completeness4/5

The surface covers the core case workflow: fetch case/customer/order context, issue refunds, update case status, and draft replies. It lacks case search/listing or case creation, but those are minor gaps for an agent working from a known case id.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides AI agents with secure access to Salesforce data and operations, enabling natural language interaction with CRM for sales, marketing, and executive teams.
    6
    5
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to retrieve customer, order, ticket, policy, and agreement information, and to prepare or execute state-changing support actions like escalations and follow-ups with confirmation and access control.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely call enterprise MCP tools with tenant-scoped RBAC, human approvals, audit logging, and multi-tool workflows across customer, order, document, and ticket data.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to securely query, search, and modify Salesforce data through standard Salesforce APIs, including record CRUD, SOQL/SOSL search, Bulk API 2.0 operations, composite calls, object discovery, and custom Apex REST endpoints.
    15
    MIT