Skip to main content
Glama
Yogeshwara7

Loan MCP Server

by Yogeshwara7

Loan MCP Server

A Model Context Protocol (MCP) server that exposes read and analytics tools for a Loan Management System backed by Microsoft Dataverse. It can be consumed by MCP clients (Claude Desktop, Copilot Studio) over stdio or HTTP, and includes an optional WhatsApp assistant.

Features

  • 12 loan tools: lookups, search, timeline, eligibility, officer workload and portfolio analytics.

  • Two transports: stdio (Claude Desktop) and Streamable HTTP (Copilot Studio / remote clients), JSON-RPC 2.0.

  • Optional WhatsApp assistant via Twilio + an LLM.

  • Microsoft Entra ID authentication (client credentials); Dataverse Web API v9.2.

  • TypeScript, Node.js 22+, structured logging, typed error handling.

Related MCP server: dataverse-mcp-server

Tools

Tool

Input

Description

GetLoanSummary

referenceNumber

Full loan summary

GetLoanStatus

referenceNumber

Status, eligibility, officer, review flag

SearchLoansByPhone

phoneNumber

Loans for a phone number

GetApplicantHistory

applicantEmail

Applications for an applicant

TrackLoanTimeline

referenceNumber

Milestone timeline

ExplainEligibility

referenceNumber

Eligibility explanation

GetRequiredDocuments

loanType

Required document checklist

ListPendingReviews

Loans under manual review

GetOfficerWorkload

officerName

An officer's assigned loans and workload

SearchLoansByStatus

status

Loans by status

SearchLoansByOfficer

officerName

Loans assigned to an officer

GetLoanAnalytics

Portfolio totals and amount statistics

Prerequisites

  • Node.js 22 or later

  • A Microsoft Dataverse environment

  • An Entra ID app registration with a corresponding Dataverse application user (Read access to the loan table)

Getting started

npm install
cp .env.example .env   # then fill in the required values
npm run build
npm start              # HTTP server (dist/http.js)

For local development with reload:

npm run dev:http       # HTTP
npm run dev            # stdio

Configuration

Set these in .env (local) or as environment variables / Azure App settings (hosted).

Required

Variable

Description

TENANT_ID

Entra ID directory (tenant) ID

CLIENT_ID

App registration (client) ID

CLIENT_SECRET

Client secret value

DATAVERSE_URL

e.g. https://yourorg.crm.dynamics.com

Common optional (defaults in parentheses)

Variable

Description

MCP_API_KEY

Shared secret for the HTTP endpoint (x-api-key). Strongly recommended when exposed.

DATAVERSE_LOAN_TABLE

Loan entity set name (cr174_loanapplics)

HTTP_PORT / HTTP_HOST

Listen port/host (PORT or 3000 / 0.0.0.0)

LOG_LEVEL

info

See .env.example for the full list, including the WhatsApp settings below.

Usage

The server is transport-only; a client drives the tools.

  • Claude Desktop (stdio): point an mcpServers entry at node dist/index.js (or npm run start:stdio).

  • Copilot Studio / remote (HTTP): add an MCP tool at https://<host>/mcp with API-key auth (header x-api-key).

GET /healthz returns liveness and WhatsApp status.

WhatsApp (optional)

Lets users query loans over WhatsApp. Enabled only when HUGGINGFACE_API_KEY and the TWILIO_* variables are set.

  1. Set HUGGINGFACE_API_KEY (or another OpenAI-compatible endpoint via LLM_BASE_URL / LLM_MODEL).

  2. Create a Twilio WhatsApp Sandbox; set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_WHATSAPP_FROM.

  3. In the sandbox settings, set the inbound webhook to https://<host>/whatsapp (POST).

  4. Set TWILIO_VALIDATE_SIGNATURE=true once the URL is stable.

Deployment

Deployed on Azure App Service. Pushing to main builds and deploys via GitHub Actions (.github/workflows/main_loan-mcp-server.yml). Set all required and secret variables as App settings; Azure runs npm start (the HTTP server) and injects PORT automatically.

Scripts

Script

Description

npm run build

Compile TypeScript to dist/

npm start

Run the HTTP server

npm run start:stdio

Run the stdio server

npm run dev / dev:http

Run from source with reload

npm run typecheck

Type-check without emitting

npm test

Integration test (requires a populated .env)

npm run test:http

Integration test over HTTP

License

MIT

Available Tools

12 tools
ExplainEligibilityExplain EligibilityB

Explain a loan application's eligibility in business-friendly language, including its eligibility status, remarks and whether manual review is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
referenceNumberYesThe loan reference number, e.g. LN-20260709110527

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It does not disclose whether the operation is read-only, idempotent, or if any side effects occur. The description mentions output content but not behavioral traits like required permissions or rate limits.

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?

The description is a single sentence that conveys the core functionality efficiently. It is front-loaded with the main action. However, it could potentially include more context without being verbose.

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?

Given no output schema, the description partially covers return values (status, remarks, manual review). No mention of error cases or format. For a simple tool with one parameter, it is minimally adequate but lacks full completeness.

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 description coverage is 100% with one parameter. The description adds an example format (e.g. LN-20260709110527), which is helpful but not essential since the schema already defines minLength and type. Baseline 3 as schema does the heavy lifting.

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 states the tool explains loan application eligibility in business-friendly language, specifying the output includes eligibility status, remarks, and manual review indication. The verb 'Explain' and resource 'Eligibility' are specific, and it distinguishes from siblings that might just return status or summary.

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?

No explicit guidance on when to use this tool over alternatives. Siblings like GetLoanStatus or GetLoanSummary could overlap, but the description does not differentiate usage contexts. Implied usage is for detailed explanation, but no exclusions or alternatives are mentioned.

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

GetApplicantHistoryGet Applicant HistoryA

Retrieve all previous loan applications for an applicant, identified by their email address, ordered by most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
applicantEmailYesThe applicant's email address

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses the retrieval, ordering, and identification method but does not mention authentication, rate limits, pagination, or safety aspects. Minimal but adequate for a simple read operation.

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?

Single sentence of 19 words, front-loaded with the action, no waste. Every part is necessary.

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?

The description is complete for a simple single-parameter retrieval tool without output schema. It explains what is returned and ordering. Could be slightly improved by hinting at the return structure, but overall it is sufficient.

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% with a well-described email parameter. The description adds 'identified by their email address' which mirrors the schema. No additional nuance is provided, so baseline of 3 is appropriate.

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 states the verb 'retrieve', the resource 'previous loan applications for an applicant', the identifier 'email address', and the ordering 'most recent first'. It distinguishes itself from siblings like SearchLoansByPhone which uses a different identifier.

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?

The description implies usage when needing loan history by email, and the context signals list alternatives, but the description itself does not explicitly state when to use this tool versus others. It provides clear context without exclusions.

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

GetLoanAnalyticsGet Loan AnalyticsA

Return portfolio-level analytics across all loan applications: totals by status and average/highest/lowest loan amounts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that it returns aggregates (totals, averages, min/max), implying read-only behavior. However, it does not mention edge cases (e.g., no loans) or performance aspects.

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?

One clear sentence that front-loads the purpose. No unnecessary words; every part contributes to understanding.

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?

Given no parameters or output schema, the description covers the tool's purpose well. It specifies the outputs (totals by status, averages, min/max) but could mention return format or potential constraints (e.g., no filtering).

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?

With zero parameters, the baseline is 4. The description adds value beyond the empty schema by explaining what the tool computes, compensating for the lack of parameter details.

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 states it returns portfolio-level analytics across all loan applications, including totals by status and average/highest/lowest loan amounts. The verb 'Return' and specific resources distinguish it from sibling tools like GetLoanSummary or SearchLoansByStatus.

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 implies usage for aggregate data (portfolio-level across all loans) but does not explicitly state when not to use it or provide alternatives. While the sibling list suggests differentiation, no direct guidance is given.

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

GetLoanStatusGet Loan StatusA

Retrieve the current processing status of a single loan application by its reference number, including eligibility status, the assigned officer and whether manual review is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
referenceNumberYesThe loan reference number, e.g. LN-20260709110527

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses returned data: eligibility status, assigned officer, manual review requirement. For a read-only retrieval tool, this is sufficient transparency.

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?

Single sentence, no fluff, front-loaded with purpose. Every word adds value.

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?

With one simple parameter and no output schema, description provides adequate context. Could mention return format or error cases, but not critical for a straightforward retrieval.

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 covers the single parameter (referenceNumber) with 100% description coverage. Description adds no additional parameter details beyond echoing the schema, so baseline 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?

Description states a specific verb ('Retrieve'), resource ('processing status'), and criteria ('by its reference number'). It lists key fields returned (eligibility, officer, manual review), distinguishing it from siblings like GetLoanSummary (summary) and TrackLoanTimeline (timeline).

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?

Clearly indicates usage: retrieving status for a single loan via reference number. Does not explicitly exclude other scenarios, but the specificity implies when to use. Sibling names further clarify context.

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

GetLoanSummaryGet Loan SummaryA

Retrieve the full summary of a single loan application by its reference number, including applicant details, amounts, status, eligibility and the assigned officer.

ParametersJSON Schema
NameRequiredDescriptionDefault
referenceNumberYesThe loan reference number, e.g. LN-20260709110527

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It describes the return content (applicant details, amounts, status, etc.) but does not explicitly state whether the operation is read-only, requires special permissions, or has side effects. The behavior is implicitly a read operation, but the description lacks explicit disclosure.

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 description is a single well-structured sentence that states the purpose, resource, and key fields upfront. No extraneous words or fluff.

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?

Given the tool's simplicity (one required parameter, no output schema) and no annotations, the description provides sufficient context for an agent to understand its purpose and return content. However, the lack of an output schema and no detail on pagination or error handling leaves minor gaps.

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% with one parameter (referenceNumber) described with an example. The tool description reiterates that the tool works by reference number, adding no new semantics beyond the schema. Baseline 3 is appropriate.

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 states the verb 'retrieve', the resource 'full summary of a single loan application', the identifier 'reference number', and lists included fields like applicant details, amounts, status, eligibility, and assigned officer. This distinguishes it from siblings like GetLoanStatus (status only) and SearchLoansByPhone (search).

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 implies usage when a single loan summary is needed via reference number. However, it does not explicitly state when to avoid this tool or mention alternatives among the many sibling tools, such as GetLoanStatus for a lighter query. No exclusions or context cues are provided.

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

GetOfficerWorkloadGet Officer WorkloadA

Summarize a loan officer's workload: total assigned applications, pending reviews and a breakdown by status, with the underlying loan list.

ParametersJSON Schema
NameRequiredDescriptionDefault
officerNameYesThe loan officer's full name, e.g. Akshitha S

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It indicates a read operation (summarize) but does not explicitly state it is read-only, nor does it mention permissions, rate limits, or side effects. The description is adequate but could disclose that this is a safe, non-destructive query.

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?

A single, focused sentence that front-loads the purpose and lists key output components. No unnecessary words, making it highly efficient for an AI agent to parse.

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?

Given the simple tool with one parameter and no output schema, the description provides a fairly complete picture of what the tool returns (total, pending, status breakdown, loan list). It omits details like pagination or sorting, but for a summary tool, this is sufficient. An explicit mention of the output format would improve completeness.

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 description coverage is 100% for the single parameter 'officerName' (with example). The description does not add meaning beyond the schema; it repeats 'the loan officer's full name'. Thus, it meets the baseline but adds no extra value.

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 states the verb 'summarize' and the resource 'a loan officer's workload', listing specific output components (total assigned applications, pending reviews, status breakdown, loan list). It distinguishes from siblings like 'GetLoanSummary' which summarizes a single loan and 'ListPendingReviews' which lists reviews without workload context.

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 implies usage for getting an overview of an officer's tasks but lacks explicit guidance on when to use vs when not. No alternatives or exclusions are mentioned, though sibling tools provide some context. The description could be improved by stating that this tool is for workload summaries, not for deep dives into individual loans.

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

GetRequiredDocumentsGet Required DocumentsA

Return the list of documents required for a given loan type. Falls back to a default checklist for unrecognized loan types.

ParametersJSON Schema
NameRequiredDescriptionDefault
loanTypeYesA loan type, e.g. Home Loan, Personal Loan, Education Loan

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, but description covers main behavior (return documents, fallback). Could detail output format or whether call is idempotent, but overall sufficient for typical use.

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 sentences, no fluff, front-loaded with action and resource. Falls back is key detail. Highly efficient.

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?

Lacks output schema, but for a simple retrieval tool with one parameter and no nested objects, description covers main purpose and edge case. Minimal expectations met.

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 description of loanType is already in schema. Description adds only context that loan type determines document set and fallback, not extra parameter meaning beyond schema.

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?

Description clearly states the tool returns document list per loan type including fallback for unrecognized types. Distinct from siblings focusing on loan status, summary, etc.

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?

Context is clear: use to get required documents for a loan type. Falls back to default for unknown types, which is helpful guidance. No explicit when-not or alternatives, but adequate.

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

ListPendingReviewsList Pending ReviewsA

List all loan applications currently in the manual-review queue (status = Under Review).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the burden. It states the filter condition but does not disclose other behavioral aspects such as pagination, ordering, or read-only nature. Minimal disclosure beyond the obvious.

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 description is a single, front-loaded sentence with no wasted words. It is highly concise and clearly communicates the tool's function.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no output schema), the description is complete. It specifies the key filtering criterion. There is no need for additional behavioral context beyond what is provided.

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?

There are no parameters, and schema coverage is 100%. The baseline for 0 parameters is 4, and the description adds no parameter information, but this is not needed. The description adds value in explaining the tool's purpose, which is separate from parameter semantics.

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 states the tool lists loan applications in the manual-review queue, with a specific status filter (Under Review). This distinguishes it from sibling tools like SearchLoansByStatus, which may have broader filtering.

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 implies usage for viewing pending reviews but does not explicitly state when to use this tool over alternatives like SearchLoansByStatus or GetLoanSummary. No exclusions or recommendations are provided.

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

SearchLoansByOfficerSearch Loans By OfficerA

Find all loan applications assigned to a specific loan officer, identified by their full name.

ParametersJSON Schema
NameRequiredDescriptionDefault
officerNameYesThe loan officer's full name, e.g. Akshitha S

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It states the tool finds loans by officer, which is read-only in nature, but does not disclose return format, pagination, error handling, or any side effects. Adequate but not detailed.

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 description is a single, well-structured sentence with no redundant words. It efficiently conveys the tool's purpose and key constraint (full name).

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?

The tool has no output schema, so the description should hint at the return structure. It only says 'loan applications' without specifying fields or any metadata. For a search tool, this is minimally adequate but lacks completeness.

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?

Schema coverage is 100% with one parameter. The description adds value by specifying 'full name' and the schema provides an example ('Akshitha S'), clarifying the exact input format beyond type constraints.

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 states the tool's function: finding all loan applications assigned to a specific loan officer by full name. It uses a specific verb 'find' and resource 'loan applications', and implicitly distinguishes from sibling tools like SearchLoansByPhone or SearchLoansByStatus which search by different criteria.

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?

No explicit guidance on when to use this tool versus alternatives such as GetOfficerWorkload or other search tools. The description implies usage for loan officer-based queries, but lacks context on exclusions or prerequisites.

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

SearchLoansByPhoneSearch Loans By PhoneA

Find all loan applications associated with a given phone number, returned as a compact list.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneNumberYesThe applicant's phone number, e.g. 8197792301

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It indicates a read-only search returning a compact list, which implies no side effects. However, it does not disclose details like exact vs. partial matching, pagination, or error behavior, making transparency adequate but not exceptional.

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 description is a single, front-loaded sentence that efficiently conveys purpose and output format without any extraneous words. Every part earns its place.

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?

Given the low complexity (one parameter, no output schema) and the presence of sibling tools, the description is largely complete. It specifies the input and output format. Minor gaps like search precision are acceptable for a simple search tool.

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 description coverage is 100% with a single parameter described with an example. The tool description adds no additional semantic value beyond what the schema already provides, so baseline 3 is appropriate.

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 states the verb (Find), resource (loan applications), and criteria (phone number), and specifies output format (compact list). It effectively distinguishes from sibling tools like GetLoanSummary or SearchLoansByStatus by focusing on phone-based lookup.

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 by the name and description, but no explicit guidance on when to use versus alternatives (e.g., SearchLoansByStatus) or when not to use. The description lacks exclusions or context for optimal invocation.

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

SearchLoansByStatusSearch Loans By StatusA

Find all loan applications matching a given status label (e.g. Received, Pending, Under Review, Approved, Rejected).

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesA loan status label, e.g. Under Review, Approved, Rejected

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, description only states basic function. No disclosure of behavior like pagination, ordering, error handling, or permission requirements.

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?

Single, front-loaded sentence with no wasted words. Efficiently communicates purpose and example values.

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?

Adequate for a simple one-parameter search tool, but lacks details like return format, limits, or handling of invalid statuses.

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 has 100% coverage and describes the 'status' parameter with examples. The description adds a list of example values, adding marginal context.

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?

Clearly states the tool finds all loan applications matching a given status label, with examples (Received, Pending, etc.). Distinguishes from sibling tools like SearchLoansByPhone and SearchLoansByOfficer.

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?

Implies use when filtering loans by status, but no explicit when-to-use, when-not-to-use, or alternatives provided.

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

TrackLoanTimelineTrack Loan TimelineA

Return a chronological timeline for a loan application using its created date, eligibility-check date, officer assignment and current status.

ParametersJSON Schema
NameRequiredDescriptionDefault
referenceNumberYesThe loan reference number, e.g. LN-20260709110527

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. It describes what data is returned but does not disclose that the operation is read-only, has no side effects, or any performance considerations. The behavioral transparency is minimal.

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?

Single, front-loaded sentence with no wasted words. Every part adds value to the purpose.

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?

Adequate for a simple tool with one parameter and no output schema, but lacks description of the timeline structure (e.g., events format, ordering) and any prerequisites or authorization needs.

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?

With 100% schema description coverage for the single parameter, the description adds no extra meaning beyond the schema's example format. Baseline score of 3 is appropriate.

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 states the verb 'Return' and the resource 'timeline for a loan application', specifying included elements like created date, eligibility-check date, officer assignment, and current status. This distinguishes it from siblings like GetLoanSummary (summary) and GetLoanStatus (single status).

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?

No explicit guidance on when to use this tool versus alternatives. It implies use for chronological history, but does not mention when not to use it or name sibling tools for simpler queries.

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. 12 tool updatesv1.0.0
    • First observedExplainEligibility
    • First observedGetApplicantHistory
    • First observedGetLoanAnalytics
    • First observedGetLoanStatus
    • First observedGetLoanSummary
    • First observedGetOfficerWorkload
    • First observedGetRequiredDocuments
    • First observedListPendingReviews
    • First observedSearchLoansByOfficer
    • First observedSearchLoansByPhone
    • First observedSearchLoansByStatus
    • First observedTrackLoanTimeline

TDQS

A3.8/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clear distinct purposes, such as GetLoanSummary, SearchLoansByPhone, and GetOfficerWorkload. However, a few overlap: GetLoanSummary and GetLoanStatus both return status and officer info, and TrackLoanTimeline provides timeline which overlaps with status. These overlaps could cause minor misselection.

Naming Consistency5/5

All tool names follow a consistent Verb+Noun+Modifier pattern in PascalCase (e.g., GetLoanSummary, SearchLoansByStatus, ListPendingReviews). The naming is predictable and uniform across the set.

Tool Count5/5

With 12 tools, the set is well-scoped for a loan management server. It covers retrieval, search, analytics, and officer workload without being excessive or insufficient.

Completeness3/5

The tools comprehensively cover retrieval queries (summary, status, timeline, search, analytics, documents) but lack any mutation operations (create, update, delete loans). This is a notable gap for a complete loan management surface.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Microsoft Dataverse API with safe-by-default configuration. Works with any Dataverse / Dynamics 365 environment.
    23
    24
    7
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A production-grade MCP server that exposes real-time banking data replicated via Oracle GoldenGate CDC as structured tools for AI agents, enabling read, score, and write operations on customer, account, transaction, and alert data.
    1
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    A production-grade MCP server for a fictional digital bank, exposing tools for an AI copilot to service customers across the full risk spectrum from read-only lookups to money movement and destructive admin actions, with OAuth 2.1 security and a realistic dataset.
    14
    1
    -