Answering insurance RFPs with approved answers, word for word.
An AI agent in Copilot Studio, backed by custom MCP servers, that finds validated answers in seconds and never rewrites the approved wording.
- Copilot Studio
- MCP
- Azure
- Dataverse
- SharePoint
- Client
- A European employee-benefits insurer
- Industry
- Insurance / Employee Benefits
- Our role
- End-to-end design, build and operation: architecture, agent design, two custom MCP servers, Azure backend, questionnaire intake pipeline, Power Apps controls, security, telemetry and DEV/UAT/PROD rollout
- Status
- In production since 2026
- Platform
- Copilot Studio · Model Context Protocol · Azure · Dataverse · SharePoint · Microsoft 365 Copilot
Hundreds of questions. Most answered before. None to be paraphrased.
The same questions, again and again
Bid teams answer long RFP questionnaires from brokers and prospective clients. Most questions (data protection, claims process, pooling, service model) were already answered in earlier bids, but those answers were spread across old proposals, SharePoint libraries and spreadsheets.
Wording is a compliance matter
A validated answer must be reused exactly as approved. An AI that “helpfully” rephrases an approved answer is a compliance risk, not a feature.
The right answer depends on context
The same question can have different correct answers by region, solution type, broker or client. And it all had to work inside Microsoft 365 and Power Platform, under enterprise identity and admin policies.
A Copilot Studio agent that finds, proves and acts.
RFP Assistant is a Copilot Studio agent backed by two custom MCP servers. Ask it a question and it searches the client's validated answer library in Dataverse: an exact match first, then a semantic search by meaning across the whole library. It then backs the answer up with supporting documents from SharePoint. It works one question at a time, or takes an entire uploaded questionnaire and answers every question in it. Bid teams reach the same agent from Microsoft 365 Copilot, from Teams, and from two places inside the model-driven app.
- 01
Finds the approved answer
It looks for an exact match first. If there isn't one, it searches the whole validated library semantically, by meaning rather than wording. Exact and near-identical matches come back verbatim, with a link to the source record.
- 02
Respects context
Results can be scoped by region, solution type, broker and client. If the best match belongs to a different context, the agent says so and offers it as an alternative. It never passes it off as an in-context answer.
- 03
Shows confidence honestly
Results are banded: verbatim answer, list of candidates, or possibly related. If the semantic index is still warming up, the agent says so instead of claiming “no match found”.
- 04
Adds supporting evidence
Searches SharePoint RFP libraries through the Microsoft 365 Copilot Retrieval API, permission-aware and on behalf of the user. Every document mentioned is a clickable link.
- 05
Handles other lookups
A child agent answers factual questions such as a person's bio, a client's account manager or contact details, straight from SharePoint documents.
- 06
Acts, not just answers
Updates answers, sends a question for review by email from a shared mailbox and marks it “In Review”, extracts questions from uploaded questionnaires, and queries RFP requests by status.
One agent, four surfaces, two custom MCP servers.
All secured with Entra ID and observable end to end.
Nearly 40 MCP tools across the two servers, for example:
- search_rfp_questions
- get_rfp_question_context
- get_rfp_requests_by_status
- update_record
- extract_document_content
- process_rfp_questions_in_batches
- execute_prompt
- get_document_text
- validate_answer_sources
Production enterprise AI, not a chatbot demo.
Search built for compliance, not creativity
An exact match at database level first, then semantic similarity across the entire validated library, held as an in-memory embedding index. Warm searches take well under a second. Scores are reported per method, never blended into one opaque number, and answers from different records are never merged.
Verbatim answers with clear confidence bands
Exact and near-identical matches return the stored, approved answer word-for-word, with the record ID and a deep link. Close and weak matches are shown as candidates, not answers. Degraded states are reported, never hidden.
Custom MCP servers as the integration layer
Two Model Context Protocol servers give the agent precise, typed tools over enterprise data instead of generic connectors. The same servers work with any MCP-capable client: Copilot Studio, GitHub Copilot, Claude and others.
Security and identity done properly
Entra ID authentication on every MCP endpoint (app roles, assignment-required service principals), managed identity between services, per-user permission-aware document retrieval, Key Vault-backed secrets, and a least-privilege review of the Dataverse app user. Rolled out DEV → UAT → PROD with zero downtime.
Evidence-based architecture decisions
A structured architecture review, fact-checked against Microsoft documentation, tested and rejected replacing the custom search with a native Dataverse knowledge source: native generative answers are non-deterministic and expose no similarity score, which fails the verbatim requirement. The result keeps the deterministic MCP matcher, with native knowledge only as a low-confidence fallback.
One agent, four surfaces
The same agent answers in Microsoft 365 Copilot, in Teams, in a control on the question form, and in a side pane that keeps the conversation as users move between records. The side pane sends the open record's context to the agent as a structured event, so it opens already knowing what the user is looking at.
Operable in production
Agent and server telemetry joined by conversation ID, a 15-tile Azure Workbook (conversations, tool latency and failures, search runs), ready-made KQL queries and an investigation runbook. App settings live in Bicep with per-environment parameter files.
Cost-conscious hosting
Scale-to-zero in development, always-warm in production. This cut the expected monthly hosting cost of the MCP tier from about €91 to about €10.
Upload a questionnaire. Get it back answered and triaged.
Bid teams don't receive questions one at a time, so the agent isn't the only way in. A questionnaire uploaded on the RFP request form is taken apart, answered question by question against the validated library, and handed back with each answer already marked as validated or draft.
- 01
Upload
A bid manager uploads the questionnaire they received on a form in the model-driven app. Excel, Word or PDF.
- 02
Extract
A back-end process reads the file and pulls out every question it contains.
- 03
Create
Each question becomes a record in the Dataverse library, linked to the RFP request it came from.
- 04
Embed
Each question goes through the text embedding API in Azure AI Foundry, and the embedding is stored on the record so semantic search can use it from then on.
- 05
Search
For every question, the process calls the MCP servers for the best answer in the validated library.
- 06
Interpret
An AI Builder prompt turns each MCP response into the answer to post, with its confidence and its sources.
- 07
Post
Answers land on the question records as the upload progresses, each with a status and the evidence behind it.
An exact one-to-one match, or a high-confidence one
The approved answer is attached to the question as it stands. Nothing needs rewriting.
Anything the search is less certain about
The best answer found is still attached, together with the reason it wasn't validated: out of scope, out of region, or from a different client. The bid manager reviews it rather than hunting for it.
Every answer carries its evidence
- A link to the question record the answer was taken from.
- The supporting document sources and their URLs.
- Enough context for a reviewer to agree or overrule in seconds.
The bid manager then reviews the drafts on the question form itself, with the agent in the side pane to help.
A bid manager's journey.
- 1
A bid manager opens an RFP question in the model-driven app, or asks the agent in Microsoft 365 Copilot or Teams.
- 2
The side pane greets them with the record's context: question, client, region.
- 3
An exact search runs against the validated library. On a hit, the approved answer comes back verbatim, with alternative versions from other RFPs as numbered options.
- 4
If there is no exact hit, the semantic search returns close matches with their context and confidence.
- 5
Supporting documents from SharePoint are added, permission-aware, each as a clickable link.
- 6
The user picks an option by number, asks for a variant for another region or client, or asks the agent to update the record.
- 7
For review, the agent emails the reviewer from a shared mailbox and moves the question to “In Review”.
In production today.
- validated answers indexed
- ~1,400 validated answers indexed
- warm search over the library
- < 1 s warm search over the library
- surfaces, 1 agent
- 4 surfaces, 1 agent
- environments, one build
- 3 environments, one build
- Entra ID authentication enforced on all MCP endpoints in all three environments, with a zero-downtime production rollout.
- Full validated library indexed: ~1,400 questions, up from an earlier design capped at the newest 500.
- Conversation-level tracing across agent, tools and servers, on a 15-tile operations dashboard.
- MCP hosting cost expected to fall from about €91 to about €10 a month through per-environment scaling.
Built on the Microsoft stack, end to end.
- Microsoft Copilot Studio
- Model Context Protocol
- Microsoft 365 Copilot
- Microsoft 365 Agents SDK
- Copilot Retrieval API
- Dataverse
- Power Apps (model-driven)
- PCF
- Power Automate
- AI Builder
- SharePoint
- Microsoft Graph
- Azure AI Foundry (text embeddings)
- Azure Container Apps
- Azure Functions
- Entra ID / MSAL
- Managed Identity
- Key Vault
- Application Insights
- Log Analytics / KQL
- Azure Workbooks
- Bicep
- Azure Developer CLI
- Docker
- TypeScript
- Node.js
- React
- Fluent UI
The skills behind it.
- AI agent architecture
- Agents with tools, child agents, prompt libraries and deterministic guardrails.
- MCP server development
- Production MCP servers over enterprise data.
- Retrieval and search engineering
- Exact matching and semantic retrieval, with embeddings, confidence banding and context scoping.
- Microsoft 365 and Power Platform integration
- Copilot Studio, Dataverse, PCF, model-driven apps, SharePoint, the Microsoft 365 Copilot channel.
- Enterprise identity and security
- Entra ID, on-behalf-of, managed identity, app roles, least privilege, tenant agent policies.
- Cloud engineering and DevOps
- Container Apps, Functions, Bicep/azd, multi-environment release.
- Observability and support
- Telemetry design, KQL, dashboards, root-cause investigations.
- Architecture governance
- Evidence-based option analysis, documented decisions, phased roadmaps.
Have knowledge your teams keep re-answering?
We build Copilot agents and MCP integrations that turn your approved content into fast, trustworthy answers inside the Microsoft 365 tools your people already use.