<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Seamus White</title>
    <description>The latest articles on DEV Community by Seamus White (@seamywhite).</description>
    <link>https://dev.to/seamywhite</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4166744%2F19d230dc-c933-4755-b716-7fa0ce55f9b4.png</url>
      <title>DEV Community: Seamus White</title>
      <link>https://dev.to/seamywhite</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seamywhite"/>
    <language>en</language>
    <item>
      <title>Using MCP for procurement research: keep the evidence attached</title>
      <dc:creator>Seamus White</dc:creator>
      <pubDate>Tue, 06 Oct 2026 14:57:42 +0000</pubDate>
      <link>https://dev.to/seamywhite/using-mcp-for-procurement-research-keep-the-evidence-attached-25ip</link>
      <guid>https://dev.to/seamywhite/using-mcp-for-procurement-research-keep-the-evidence-attached-25ip</guid>
      <description>&lt;p&gt;I build BidSkim, a service that matches UK suppliers to public-sector contracts. One useful way to work with procurement data is to query it through an AI assistant. The difficult part is keeping the evidence visible when the assistant turns a structured record into a confident sentence.&lt;/p&gt;

&lt;p&gt;A contract ending in six months is a reason to investigate. It does not prove that the buyer will run a new tender on that date. A published award value is also different from money actually paid to the supplier. Those distinctions should survive every step from retrieval to the final answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a research question
&lt;/h2&gt;

&lt;p&gt;A useful request contains the work, geography and time window:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find IT support contracts in Yorkshire that are approaching their recorded end date in the next six months. Show the buyer, incumbent, source notice and the evidence for the date. Put confirmed live tenders in a separate table.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gives the assistant something testable to retrieve. It also prevents a list of historical awards from being presented as a list of opportunities that are open for bidding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserve three layers
&lt;/h2&gt;

&lt;p&gt;Keep the published fact, the inference and the missing information separate. For example, this is an illustrative response shape, not BidSkim's API schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"published_fact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"contract_end_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2027-03-31"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;official notice URL&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Potential renewal to investigate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Recorded end date falls within the research window"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"unknowns"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Whether an extension will be exercised"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Whether a replacement tender will be published"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The date above is fictional. The point is the separation. If a field is missing, return it as missing. Do not ask the model to fill gaps from what usually happens in that industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat matching as qualification
&lt;/h2&gt;

&lt;p&gt;A notice can describe the right service and still be unsuitable. The delivery region, minimum qualifications, contract size and deadline can each rule it out. Ask for a short reason for every suggested match, including the requirement that needs checking. A similarity score is useful for sorting; the original notice determines whether the supplier can bid.&lt;/p&gt;

&lt;p&gt;A good results table has columns for the opportunity, why it fits, what could disqualify it and the source. It should be possible to verify one row without repeating the whole conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep research tools read-only
&lt;/h2&gt;

&lt;p&gt;A research assistant needs to search and retrieve records before it needs permission to change anything. BidSkim's &lt;a href="https://bidskim.com/mcp" rel="noopener noreferrer"&gt;MCP connection&lt;/a&gt; is read-only and includes tender search, renewal research, buyer and supplier profiles, and account pipeline queries. Access follows the account's plan; MCP is included with Predict.&lt;/p&gt;

&lt;p&gt;For a first check, ask the assistant for one result and open its source. Then widen the search. If the result is a renewal signal, verify the contract dates and any extension wording before acting on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the output against the source
&lt;/h2&gt;

&lt;p&gt;Before relying on a shortlist, check that the live notices are still open, the deadline was copied correctly, and any renewal estimate is labelled as an estimate. Keep the notice links alongside the answer when exporting it.&lt;/p&gt;

&lt;p&gt;Connecting an assistant to real records makes research more useful. Keeping the distinction between evidence and inference makes that research easier to trust.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>api</category>
    </item>
  </channel>
</rss>
