Skip to main content
Glama
YihengLi-1

field-agent-mcp

by YihengLi-1

Forward-Deployed Agent Lab

CI

A production-shaped, synthetic service-business agent that demonstrates the work between a model demo and a usable customer system: workflow discovery, grounded answers, tool boundaries, human escalation, evaluation, voice integration, and Kubernetes deployment.

This repository contains no client data or client code. The fictional Northstar Clinic dataset was written for reproducible testing. The operating pattern is informed by hands-on work helping small service businesses adopt AI workflows; see the anonymized case study.

System at a glance

Web / Voice / MCP client
          |
          v
  FastAPI + MCP adapters
          |
          v
  deterministic route + safety boundary
      /          |           \
 knowledge    intake tool    human handoff
 citations    pending only   normal / urgent
          |
          v
 tests + synthetic evaluation + Kubernetes runtime controls

Related MCP server: ToolBridge

What is implemented

  • FastAPI endpoints for agent responses, voice-ready SSML/audio, health, readiness, and evaluation

  • Deterministic retrieval over an approved bilingual knowledge base with source citations

  • Explicit escalation for emergencies, professional judgment, and ungrounded questions

  • MCP tools for knowledge search, intake collection, and human escalation

  • Local macOS text-to-speech adapter with no external data transfer

  • Reproducible synthetic evaluation for route, handoff, tool-selection, and grounding behavior

  • Compact BERT intent-router fine-tuning experiment, kept outside the deterministic safety boundary

  • Docker image and Kubernetes Deployment, Service, HPA, probes, resource limits, and NetworkPolicy

  • Automated API, core-engine, MCP-tool, evaluation, and deployment-manifest tests

Run locally

Python 3.11–3.13 is supported.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
pytest
python scripts/run_eval.py
uvicorn field_agent_lab.api:app --reload

Open http://127.0.0.1:8000/docs for the interactive API.

Grounded knowledge request

curl -s http://127.0.0.1:8000/v1/agent/respond \
  -H 'content-type: application/json' \
  -d '{"message":"Do you accept HSA cards?","locale":"en-US"}'

The response includes a knowledge route and citations to the approved payment document.

Scheduling request

curl -s http://127.0.0.1:8000/v1/agent/respond \
  -H 'content-type: application/json' \
  -d '{"message":"I want to book an appointment","customer_id":"demo-123"}'

The system returns a collect_intake tool call and explicitly says that staff must confirm availability.

Voice-ready response

curl -s http://127.0.0.1:8000/v1/voice/respond \
  -H 'content-type: application/json' \
  -d '{"message":"When are you open?","generate_audio":false}'

Set generate_audio to true on macOS to return base64-encoded AIFF audio generated by the local say provider.

MCP server

field-agent-mcp

Tools:

  • search_service_knowledge

  • collect_intake

  • escalate_to_human

The MCP interface reuses the same core engine as the HTTP API, so safety and grounding behavior do not drift by channel.

Compact-model experiment

Install the optional training dependencies and run:

python -m pip install -e ".[train]"
python training/train_router.py

The script fine-tunes prajjwal1/bert-tiny on four synthetic intent classes and writes transparent metrics to artifacts/router_metrics.json. The model is an experiment; deterministic rules remain the safety boundary.

Deployment

docker build -t forward-deployed-agent-lab .
kubectl apply -f deployment/k8s.yaml

The manifest intentionally includes readiness/liveness probes, non-root execution, dropped Linux capabilities, resource requests/limits, horizontal autoscaling, and a network policy.

Evidence and limitations

Generated reports are committed under artifacts/ after execution. All benchmark cases are visible in data/eval_cases.jsonl. The dataset is small and synthetic, so the reported score is a regression baseline—not a claim of clinical quality or production generalization.

Available Tools

3 tools
collect_intakeA

Collect scheduling details without claiming that an appointment is confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
serviceYes
preferred_timeYes
callback_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses a key behavioral trait: the tool does not claim appointment confirmation. This is valuable, but it omits other potential behaviors like data persistence, return format, or side effects. Still, it adds meaningful beyond-schema context.

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, focused sentence that front-loads the core action and includes a key nuance. No wasted words, though it omits potentially useful details.

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 is simple with four self-explanatory parameters and an output schema (not shown). The description is enough to understand the basic operation but lacks details about what happens after collection, any constraints on input values, or how the returned data is structured. Sibling tools indicate there are other pathways, but the description does not connect to them.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not explain any of the four parameters (name, callback_number, service, preferred_time). The phrase 'scheduling details' vaguely maps to these fields but adds no specific semantics beyond what the parameter names already convey. The description fails to compensate for the lack of schema descriptions.

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 purpose: 'Collect scheduling details' with a specific verb and resource. It also adds a distinguishing constraint ('without claiming that an appointment is confirmed'), which helps differentiate it from other tools like escalate_to_human or search_service_knowledge.

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 this tool is used when gathering scheduling information and explicitly notes it does not confirm appointments, providing some usage context. However, it does not mention alternatives like search_service_knowledge or escalate_to_human, nor does it state when not to use this tool, so the guidance is only implicit.

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

escalate_to_humanC

Queue a request for a human staff member.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYes
priorityNonormal

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It only states 'Queue a request' without detailing what happens after queuing, whether it is synchronous, or if any confirmation is returned. The term 'Queue' hints at asynchronous handling but lacks specificity.

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, front-loaded with the action, and contains no filler words. While under-specified, the efficient structure earns a high score for conciseness.

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?

The tool is simple (2 params, no enums) and has an output schema, but the description omits critical usage context such as when to escalate, how priority affects queuing, and what happens to the request. The output schema may cover return values, but the description alone is incomplete.

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

Parameters1/5

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

The description does not mention the summary or priority parameters. With 0% schema description coverage, the agent receives no guidance on what content to include in summary or what priority values are valid.

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?

The description uses the verb 'Queue' and identifies the resource as 'a request for a human staff member', clearly indicating the action. It is distinct from siblings like search_service_knowledge and collect_intake, which serve different purposes.

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 escalate versus using search_service_knowledge or collect_intake. No prerequisites, scenarios, or exclusion criteria are mentioned.

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

search_service_knowledgeB

Search approved service-business knowledge and return citations.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
localeNoen-US

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/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 full burden of behavioral disclosure. It does mention returning citations, which is useful, but lacks context about authentication, result limits, error behavior, or the meaning of 'approved' knowledge. The read-only nature of a search is implied but not stated.

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 sentence that is immediately front-loaded with the verb and purpose. Every word earns its place, and there is no redundant or filler content.

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?

While an output schema exists, the description lacks essential context such as when to use this tool versus alternatives, and what the locale parameter does. For a search tool with two parameters, the description is under-specified and leaves the agent to guess about locale semantics and search scope.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It does not explain the 'query' or 'locale' parameters beyond their names. 'Query' is somewhat self-evident, but 'locale' is unexplained and could significantly affect results. The description adds no value over the bare parameter names.

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 uses a specific verb ('Search') and clearly identifies the resource ('approved service-business knowledge') and outcome ('return citations'). It distinguishes itself from sibling tools like collect_intake and escalate_to_human, which serve different purposes.

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 searching knowledge, but does not explicitly state when to use this tool versus the sibling tools, nor any exclusions or prerequisites. There is no mention of 'use this before escalating' or alternatives.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.1.0
    • First observedcollect_intake
    • First observedescalate_to_human
    • First observedsearch_service_knowledge

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: searching knowledge, collecting intake details, and escalating to a human. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow the same verb_noun pattern with lowercase and underscores: search_service_knowledge, collect_intake, escalate_to_human. This is highly consistent.

Tool Count5/5

With only 3 tools, the server is well-scoped for a focused triage workflow. Each tool serves a necessary function without redundancy or bloat.

Completeness4/5

The tools cover the core lifecycle of a field agent interaction: retrieving information, gathering details, and escalating when needed. A minor gap is the lack of a confirmation or follow-up action, but this may be intentional to avoid false commitments.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A governed MCP server for integrating AI agents with customer data, featuring role-based access control, field redaction, and human-in-the-loop approval for secure support operations.
    1
    -
  • F
    license
    A
    quality
    B
    maintenance
    A production-grade MCP server that provides a centralized microservice toolkit for LLM agents, enabling web search and extensible tool integration.
    1
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/YihengLi-1/forward-deployed-agent-lab'

If you have feedback or need assistance with the MCP directory API, please join our Discord server