<?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: Mansi Pathak</title>
    <description>The latest articles on DEV Community by Mansi Pathak (@mansi_dataville).</description>
    <link>https://dev.to/mansi_dataville</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%2F4195062%2F00c29e98-d7cf-4fac-bf2d-8eca9a2726d3.png</url>
      <title>DEV Community: Mansi Pathak</title>
      <link>https://dev.to/mansi_dataville</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mansi_dataville"/>
    <language>en</language>
    <item>
      <title>Give your AI assistant live SEC filings in 5 minutes (MCP tutorial)</title>
      <dc:creator>Mansi Pathak</dc:creator>
      <pubDate>Thu, 22 Oct 2026 16:45:08 +0000</pubDate>
      <link>https://dev.to/mansi_dataville/give-your-ai-assistant-live-sec-filings-in-5-minutes-mcp-tutorial-5gp9</link>
      <guid>https://dev.to/mansi_dataville/give-your-ai-assistant-live-sec-filings-in-5-minutes-mcp-tutorial-5gp9</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; one &lt;code&gt;claude mcp add&lt;/code&gt; (or a few lines of JSON for Cursor) gives your agent SEC EDGAR filings with real numbers and source links. Steps below, plus the raw API if you'd rather skip MCP.&lt;/p&gt;

&lt;p&gt;Ask an LLM for a company's latest revenue and you'll get one of two things: a number from its training data (stale) or a hallucination (worse).&lt;/p&gt;

&lt;p&gt;This tutorial fixes that in about 5 minutes. You'll give Claude, Cursor, or VS Code live access to SEC EDGAR filings through an MCP server, then ask questions like &lt;em&gt;"What were Home Depot's revenue and net income in its latest 10-Q?"&lt;/em&gt; and get answers pulled from the actual filing, with a link back to the source document.&lt;/p&gt;

&lt;p&gt;I'm a founding engineer at &lt;a href="https://dataville.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=edgar_mcp_tutorial" rel="noopener noreferrer"&gt;Dataville&lt;/a&gt;, and we built this. In my &lt;a href="https://dev.to/mansi_dataville/exposing-11-public-data-sources-to-llm-agents-through-one-mcp-server-19pl"&gt;last post&lt;/a&gt; I covered how the server is designed. This one is purely hands-on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A free Dataville account (includes $5 of credits every month)&lt;/li&gt;
&lt;li&gt;One of: Claude (web or desktop), Claude Code, Cursor, Windsurf, or VS Code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 0: Try it with zero setup
&lt;/h2&gt;

&lt;p&gt;No account or key needed for this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.dataville.com/edgar/HD"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get the latest filing for the ticker, in the same JSON shape every Dataville source uses (trimmed here):&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;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&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;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOME DEPOT, INC. — 10-Q (2026-08-25)"&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"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sec-edgar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Company: HOME DEPOT, INC.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Form: 10-Q&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&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;"metadata"&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;"form_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10-Q"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filing_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;"2026-08-25"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"financials"&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;"revenue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$89.63B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"net_income"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$8.05B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"eps_diluted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$8.09"&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;"document_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;"https://www.sec.gov/Archives/edgar/data/354950/..."&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;span class="nl"&gt;"usage"&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;"..."&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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="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;&lt;code&gt;body&lt;/code&gt; is plain text you can hand straight to a model. &lt;code&gt;metadata&lt;/code&gt; holds the structured fields. Anonymous requests are capped at 50 per 24 hours per IP, which is plenty to kick the tires.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Get an API key
&lt;/h2&gt;

&lt;p&gt;Sign up at &lt;a href="https://dataville.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=edgar_mcp_tutorial" rel="noopener noreferrer"&gt;dataville.com&lt;/a&gt; (free tier). A key is created automatically; you'll find it on the API Keys page of the dashboard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DATAVILLE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Connect your AI tool
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http dataville https://api.dataville.com/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$DATAVILLE_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

claude mcp list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; (&lt;code&gt;.cursor/mcp.json&lt;/code&gt; or &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;)&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;"mcpServers"&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;"dataville"&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;"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;"https://api.dataville.com/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&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;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer YOUR_API_KEY"&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;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;&lt;strong&gt;Claude (web or desktop)&lt;/strong&gt;: go to Customize → Connectors, click &lt;strong&gt;+&lt;/strong&gt;, choose &lt;strong&gt;Add custom connector&lt;/strong&gt;, and paste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.dataville.com/mcp?token=YOUR_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then turn the connector on in your chat. Custom connectors work on every Claude plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windsurf and VS Code&lt;/strong&gt; configs are in the &lt;a href="https://docs.dataville.com/ai-tools?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=edgar_mcp_tutorial" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The server exposes two tools: &lt;code&gt;list_dataville_sources&lt;/code&gt; and &lt;code&gt;search_dataville&lt;/code&gt;. That's the whole surface area your agent has to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Ask a real question
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Using Dataville, what is Home Depot's most recent SEC filing? Summarize the headline numbers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You'll see a "Search a Dataville data source" step, then an answer grounded in the filing. When I ran it, it came back with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Form:&lt;/strong&gt; 10-Q, filed 2026-08-25, period ending 2026-08-02&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revenue:&lt;/strong&gt; $89.63B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operating income:&lt;/strong&gt; $11.82B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Net income:&lt;/strong&gt; $8.05B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diluted EPS:&lt;/strong&gt; $8.09&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link:&lt;/strong&gt; the primary document on sec.gov&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One gotcha worth knowing: &lt;strong&gt;10-Q figures are year-to-date&lt;/strong&gt;, so a Q2 10-Q covers six months. Good models will say so if you ask; it's in the metadata (&lt;code&gt;period_start&lt;/code&gt; / &lt;code&gt;period&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;If the tool doesn't fire, add "use Dataville" to your prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Prompts worth stealing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Pull Home Depot's last four 10-Qs from EDGAR and chart quarterly revenue. Remember 10-Q figures are year-to-date."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Which Home Depot insiders filed Form 4s recently, and were they buying or selling?"&lt;/em&gt; (the EDGAR response includes recent insider transactions)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Get NVIDIA's latest 10-K from EDGAR and its Wikipedia article, then write a one-paragraph company brief citing both."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Find the arXiv paper 1706.03762 and summarize its abstract."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last two show the real trick: one MCP server, many sources, so your agent can cross-reference without you wiring up another integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Skip MCP and call it from code
&lt;/h2&gt;

&lt;p&gt;Same data over plain HTTP (&lt;code&gt;pip install requests&lt;/code&gt; if you don't have it). Passing &lt;code&gt;limit&lt;/code&gt; returns a list of filings instead of just the latest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.dataville.com/edgar/HD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;form_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10-Q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DATAVILLE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;filing&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;fin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;filing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;financials&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filing&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filing_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;filing&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;form_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;fin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running it today prints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-25 10-Q $89.63B
2026-05-27 10-Q $41.77B
2025-11-25 10-Q $126.48B
2025-08-26 10-Q $85.13B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the jump from $41.77B to $89.63B: that's the year-to-date effect again, not a doubling of sales. Need raw numbers to do your own math? Each filing also carries &lt;code&gt;financials_raw&lt;/code&gt;, plus &lt;code&gt;fiscal_year&lt;/code&gt;, &lt;code&gt;fiscal_period&lt;/code&gt; and &lt;code&gt;accession_number&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filtering filings: &lt;code&gt;form_type&lt;/code&gt;, &lt;code&gt;from&lt;/code&gt;, &lt;code&gt;to&lt;/code&gt;, &lt;code&gt;limit&lt;/code&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Param&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;form_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;10-K&lt;/code&gt;, &lt;code&gt;10-Q&lt;/code&gt;, &lt;code&gt;8-K&lt;/code&gt;, &lt;code&gt;20-F&lt;/code&gt;, &lt;code&gt;S-1&lt;/code&gt;, &lt;code&gt;DEF 14A&lt;/code&gt;, plus &lt;code&gt;/A&lt;/code&gt; amendments&lt;/td&gt;
&lt;td&gt;Exact match on form. Omit it to get the newest filing of any type.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;from&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;YYYY-MM-DD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Start of the date range&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;to&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;YYYY-MM-DD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;End of the date range&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;limit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer ≥ 1&lt;/td&gt;
&lt;td&gt;How many filings to list (defaults to 5 when a date range is set)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sending any of &lt;code&gt;from&lt;/code&gt;, &lt;code&gt;to&lt;/code&gt; or &lt;code&gt;limit&lt;/code&gt; switches to list mode: &lt;code&gt;data&lt;/code&gt; is the newest match and &lt;code&gt;data.metadata.filings&lt;/code&gt; lists them all, newest first.&lt;/p&gt;

&lt;p&gt;For example, every 8-K Home Depot filed in 2026 (8-Ks are the "something material happened" filings):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.dataville.com/edgar/HD?form_type=8-K&amp;amp;from=2026-01-01&amp;amp;to=2026-12-31&amp;amp;limit=10"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$DATAVILLE_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns six 8-Ks (filing date and accession number shown):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-21 8-K 0000354950-26-000148
2026-08-18 8-K 0000354950-26-000145
2026-08-12 8-K 0000354950-26-000141
2026-05-26 8-K 0000354950-26-000105
2026-05-19 8-K 0000354950-26-000101
2026-02-24 8-K 0000354950-26-000026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Six results with &lt;code&gt;limit=10&lt;/code&gt; simply means that's all there is in the range, and you're only charged for the six.&lt;/p&gt;

&lt;p&gt;Two things to know: &lt;code&gt;form_type&lt;/code&gt; matches exactly, so &lt;code&gt;10-K&lt;/code&gt; won't return a &lt;code&gt;10-K/A&lt;/code&gt; (ask for amendments by name), and a bad date or a &lt;code&gt;from&lt;/code&gt; after &lt;code&gt;to&lt;/code&gt; returns a &lt;code&gt;400 INVALID_TIMEFRAME&lt;/code&gt; that isn't charged.&lt;/p&gt;

&lt;p&gt;Each filing in the list counts as one request, and a &lt;code&gt;limit&lt;/code&gt; above 5 needs an API key. Want this running every morning with Slack alerts? There's a &lt;a href="https://docs.dataville.com/guides/filings-watchlist?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=edgar_mcp_tutorial" rel="noopener noreferrer"&gt;filings watchlist guide&lt;/a&gt; for exactly that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond EDGAR
&lt;/h2&gt;

&lt;p&gt;The same two tools reach 11 sources: Wikipedia, arXiv, OpenAlex, Papers with Code, Stack Exchange, PyPI, US Census, USDA FoodData, Project Gutenberg, a historical news archive, and SEC EDGAR. Every one returns the same response shape, so code you write for one works for all of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The free tier covers everything in this post. Full parameter reference and the other sources are in the &lt;a href="https://docs.dataville.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=edgar_mcp_tutorial" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What would you build with live filings in your agent? And which data source should we add next? Tell me in the comments. I read and reply to all of them.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I drafted this post with help from an AI assistant. I ran and verified every command and output shown here myself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>tutorial</category>
      <category>api</category>
      <category>ai</category>
    </item>
    <item>
      <title>Exposing 11 public data sources to LLM agents through one MCP server</title>
      <dc:creator>Mansi Pathak</dc:creator>
      <pubDate>Tue, 20 Oct 2026 15:54:58 +0000</pubDate>
      <link>https://dev.to/mansi_dataville/exposing-11-public-data-sources-to-llm-agents-through-one-mcp-server-19pl</link>
      <guid>https://dev.to/mansi_dataville/exposing-11-public-data-sources-to-llm-agents-through-one-mcp-server-19pl</guid>
      <description>&lt;p&gt;&lt;em&gt;An open-source example of how to combine company context, financial disclosures, and source attribution in an AI application.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI agents are getting increasingly capable at reasoning about complex questions. But when those questions depend on external information, the challenge often isn't the model. It's the data.&lt;/p&gt;

&lt;p&gt;Consider a seemingly straightforward request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Research this company, explain what it does, and summarize what its regulatory filings tell us."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An AI agent needs to bring together different kinds of information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Company background:&lt;/strong&gt; What does the company do? What are its products, history, and industry?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulatory disclosures:&lt;/strong&gt; What has the company reported in its SEC filings?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source attribution:&lt;/strong&gt; Where did each claim come from, and how can someone verify it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those answers don't necessarily live in the same system or follow the same data structure.&lt;/p&gt;

&lt;p&gt;That's the problem we wanted to explore with Dataville's open-source &lt;a href="https://github.com/datavilleorg/company-intelligence-agent" rel="noopener noreferrer"&gt;Company Intelligence Agent&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two sources, one research workflow
&lt;/h2&gt;

&lt;p&gt;The agent combines information from two complementary sources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wikipedia&lt;/strong&gt; provides broad company context, including background information that can help establish what an organization does and how it fits into its industry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEC EDGAR&lt;/strong&gt; provides regulatory filings for publicly traded companies, including disclosures that can support more detailed financial and operational research.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these sources allow an agent to connect general company context with formal corporate disclosures.&lt;/p&gt;

&lt;p&gt;The important design principle is that the resulting research should remain connected to its sources. Rather than presenting a collection of unsupported statements, the Company Intelligence Agent links its claims to the underlying information. That makes the output easier to inspect and verify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just ask an LLM?
&lt;/h2&gt;

&lt;p&gt;A language model can generate a convincing company profile from its existing knowledge. But convincing isn't the same as verifiable.&lt;/p&gt;

&lt;p&gt;There are several challenges when relying exclusively on model knowledge:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Information changes.&lt;/strong&gt; Companies release new filings, revise disclosures, introduce products, and change their operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different questions require different kinds of data.&lt;/strong&gt; A question about a company's history is fundamentally different from a question about a reported financial figure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source attribution matters.&lt;/strong&gt; For research applications, users need to distinguish information supported by a source from an interpretation generated by the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External data integration adds complexity.&lt;/strong&gt; Each source can have its own access methods, response structures, and update cycles.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A useful agent needs a way to work across these differences without forcing developers to rebuild the same integrations for every application.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture: separating data access from agent behavior
&lt;/h2&gt;

&lt;p&gt;The Company Intelligence Agent uses Dataville to access Wikipedia and SEC filing information through a common data layer.&lt;/p&gt;

&lt;p&gt;At a conceptual level, the workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Research question
      │
      ▼
Company Intelligence Agent
      │
      ▼
Dataville (REST API / MCP server)
      │
      ├──► Wikipedia
      └──► SEC EDGAR
      │
      ▼
Source-linked results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The agent is responsible for the research workflow. Dataville provides access to curated external data through its REST API and MCP server.&lt;/p&gt;

&lt;p&gt;This separation is useful because developers can concentrate on what the application should do with the information rather than spending all their effort managing individual data integrations. It also creates a foundation for extending the application to additional datasets as they become available.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why source-linked answers matter
&lt;/h2&gt;

&lt;p&gt;Suppose an agent produces a company research summary containing background information alongside details from regulatory filings.&lt;/p&gt;

&lt;p&gt;Without source references, the user has to trust the generated response or manually reconstruct where each statement originated.&lt;/p&gt;

&lt;p&gt;With source-linked claims, the research becomes easier to audit. A developer can build experiences where users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect the underlying evidence,&lt;/li&gt;
&lt;li&gt;distinguish general context from regulatory disclosures, and&lt;/li&gt;
&lt;li&gt;investigate individual claims.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Source attribution doesn't guarantee that every interpretation is correct. But it gives developers and users a stronger basis for checking the result. For company research, that's an important step toward more trustworthy AI applications.&lt;/p&gt;
&lt;h2&gt;
  
  
  Explore the open-source project
&lt;/h2&gt;

&lt;p&gt;We've published the Company Intelligence Agent as an open-source example for developers interested in building applications with external data.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/datavilleorg" rel="noopener noreferrer"&gt;
        datavilleorg
      &lt;/a&gt; / &lt;a href="https://github.com/datavilleorg/company-intelligence-agent" rel="noopener noreferrer"&gt;
        company-intelligence-agent
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Company research agent combining Wikimedia context with authoritative SEC EDGAR filings and financials — every claim source-linked. Built on the Dataville API and MCP.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Company Intelligence Agent&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Research any public company from two trustworthy sources at once — Wikimedia for context, SEC EDGAR for authoritative disclosures — with every claim linked back to where it came from.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built on &lt;a href="https://dataville.com" rel="nofollow noopener noreferrer"&gt;Dataville&lt;/a&gt;: one API and one MCP server over both datasets, so you don't build or maintain ingestion, parsing, entity matching or update infrastructure for either.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.dataville.com/api-keys" rel="nofollow noopener noreferrer"&gt;Get a free API key&lt;/a&gt; · &lt;a href="https://docs.dataville.com" rel="nofollow noopener noreferrer"&gt;Docs&lt;/a&gt; · &lt;a href="https://docs.dataville.com/api-reference/overview" rel="nofollow noopener noreferrer"&gt;API reference&lt;/a&gt; · &lt;a href="https://github.com/datavilleorg/dataville-mcp" rel="noopener noreferrer"&gt;Dataville MCP&lt;/a&gt; · &lt;a href="https://github.com/datavilleorg/dataville-wikimedia" rel="noopener noreferrer"&gt;Wikimedia package&lt;/a&gt; · &lt;a href="https://github.com/datavilleorg/dataville-sec-edgar" rel="noopener noreferrer"&gt;SEC EDGAR package&lt;/a&gt; · &lt;a href="https://app.dataville.com/demos" rel="nofollow noopener noreferrer"&gt;Live demos&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Status: in active development.&lt;/strong&gt; The quickstart below runs today against the live Dataville API
The full agent (entity resolution, LLM reasoning layer, UI) is being built in this repo — watch or star it to follow along.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;Company name ──▶ Dataville ──┬─▶ Wikimedia: description, history, products, people, related entities
                             └─▶ SEC EDGAR: 10-K / 10-Q / 8-K filings, XBRL financials, material events
                                       │
                                       ▼
                     Reasoning layer&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/datavilleorg/company-intelligence-agent" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;The project demonstrates a practical use case for combining Wikipedia and SEC filings while retaining links to the underlying sources. You can explore the repository, review the implementation, and use it as a starting point for your own experiments.&lt;/p&gt;

&lt;p&gt;For additional examples, Dataville also provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.dataville.com/demos" rel="noopener noreferrer"&gt;Developer demos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.dataville.com" rel="noopener noreferrer"&gt;API and MCP documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datavilleorg" rel="noopener noreferrer"&gt;GitHub organization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bigger question: how should agents access external data?
&lt;/h2&gt;

&lt;p&gt;Building the Company Intelligence Agent raises a broader architectural question: when should an agent query an external data source directly, and when should it rely on previously ingested information?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For relatively &lt;strong&gt;static, text-heavy content&lt;/strong&gt;, retrieval from an existing index may be appropriate.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;structured information, exact values, or data that changes over time&lt;/strong&gt;, direct queries or regularly refreshed structured datasets may be a better fit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And regardless of the approach, developers still need to think about source attribution, reporting periods, revisions, and consistency.&lt;/p&gt;

&lt;p&gt;There isn't one universal answer. The right approach depends on the application, the underlying data, and how important accuracy, freshness, and reproducibility are to the user.&lt;/p&gt;

&lt;h2&gt;
  
  
  What would you build?
&lt;/h2&gt;

&lt;p&gt;The Company Intelligence Agent is one example of what becomes possible when external datasets are easier to access through a common interface.&lt;/p&gt;

&lt;p&gt;We're interested in how other developers are solving these problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are you using MCP, direct APIs, or RAG for company research agents?&lt;/li&gt;
&lt;li&gt;How are you handling source attribution when combining multiple datasets?&lt;/li&gt;
&lt;li&gt;What additional sources would make a company intelligence agent more useful?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Take a look at the project and let us know in the comments what you'd improve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore the code:&lt;/strong&gt; &lt;a href="https://github.com/datavilleorg/company-intelligence-agent" rel="noopener noreferrer"&gt;github.com/datavilleorg/company-intelligence-agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test the working demo:&lt;/strong&gt; &lt;a href="https://docs.dataville.com/guides/competitor-scan" rel="noopener noreferrer"&gt;https://docs.dataville.com/guides/competitor-scan&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I work with Dataville on marketing and developer outreach. Dataville provides access to curated public and select licensed datasets through a unified API and MCP server.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
