<?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>Forem: Kevin Meneses González</title>
    <description>The latest articles on Forem by Kevin Meneses González (@kevin_menesesgonzlez).</description>
    <link>https://forem.com/kevin_menesesgonzlez</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2412421%2F23a50b66-3e3e-4d13-8809-9bc0b03c0f40.png</url>
      <title>Forem: Kevin Meneses González</title>
      <link>https://forem.com/kevin_menesesgonzlez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kevin_menesesgonzlez"/>
    <language>en</language>
    <item>
      <title>How to Connect Real-Time Stock Data to Your AI Agent (MCP Tutorial)</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Thu, 09 Apr 2026 20:20:55 +0000</pubDate>
      <link>https://forem.com/kevin_menesesgonzlez/how-to-connect-real-time-stock-data-to-your-ai-agent-mcp-tutorial-2oj</link>
      <guid>https://forem.com/kevin_menesesgonzlez/how-to-connect-real-time-stock-data-to-your-ai-agent-mcp-tutorial-2oj</guid>
      <description>&lt;p&gt;Most AI agents sound impressive until you ask for something that depends on the present moment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's Apple trading at right now?"&lt;br&gt;
"Show me the latest fundamentals for Microsoft."&lt;br&gt;
"Which stocks are moving today?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's when the weakness appears.&lt;/p&gt;

&lt;p&gt;A model can be eloquent, persuasive, and fast. But without access to external tools and live data, it is still reasoning in a closed room. Claude's tool use lets it request external functions that your application executes, and MCP is an open standard for connecting AI applications like Claude to tools and data sources.&lt;/p&gt;

&lt;p&gt;In finance, that limitation is fatal.&lt;/p&gt;

&lt;p&gt;Because in this category, "almost correct" is just another way of being wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem: AI Without Data Is Not a Financial Product
&lt;/h2&gt;

&lt;p&gt;A lot of people are building "AI finance apps" that are really just polished chat interfaces.&lt;/p&gt;

&lt;p&gt;They have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a nice prompt&lt;/li&gt;
&lt;li&gt;a clean UI&lt;/li&gt;
&lt;li&gt;maybe some charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But they do not have a robust data layer.&lt;/p&gt;

&lt;p&gt;That means the assistant cannot reliably access:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;live prices&lt;/li&gt;
&lt;li&gt;historical candles&lt;/li&gt;
&lt;li&gt;fundamental data&lt;/li&gt;
&lt;li&gt;market news&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that destroys trust.&lt;/p&gt;

&lt;p&gt;If a financial assistant cannot access current market information through tools or APIs, it either refuses, guesses, or answers from stale context. Claude's tool flow is explicitly designed so the model decides when to call a tool, your application runs it, and then the result is sent back for a grounded answer.&lt;/p&gt;

&lt;p&gt;That is why the real product is not "the chatbot."&lt;/p&gt;

&lt;p&gt;The real product is the combination of: &lt;strong&gt;LLM + tool access + reliable financial data&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why MCP Matters Here
&lt;/h2&gt;

&lt;p&gt;MCP matters because it gives your AI a clean way to interact with external capabilities instead of pretending to know everything.&lt;/p&gt;

&lt;p&gt;The MCP architecture is client-server based: a host such as Claude or Claude Desktop connects to one or more MCP servers, and those servers expose tools and resources. In practice, that means your AI can ask for a stock price, a fundamentals lookup, or a market-news request through an external tool instead of inventing an answer.&lt;/p&gt;

&lt;p&gt;That is the bridge from "smart text generation" to "useful financial system."&lt;/p&gt;




&lt;h2&gt;
  
  
  Why EODHD APIs Are So Important
&lt;/h2&gt;

&lt;p&gt;This is the part people underestimate.&lt;/p&gt;

&lt;p&gt;You do not just need an API. You need a data source that is broad enough, stable enough, and practical enough to power repeated tool calls.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;Try EODHD APIs&lt;/a&gt;&lt;/strong&gt; — the financial data layer that turns Claude from a language model into a finance-aware assistant.&lt;br&gt;

&lt;/div&gt;


&lt;p&gt;For an AI financial assistant, the data layer needs to support use cases like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current quote retrieval&lt;/li&gt;
&lt;li&gt;historical chart context&lt;/li&gt;
&lt;li&gt;fundamentals for deeper analysis&lt;/li&gt;
&lt;li&gt;news-driven reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your data is fragmented across multiple providers, integration gets messy fast. If the responses are inconsistent, the AI layer becomes brittle. If the coverage is weak, the user notices immediately.&lt;/p&gt;

&lt;p&gt;So the role of EODHD here is not cosmetic. It is the system that turns Claude from a language model into a finance-aware assistant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two Practical Ways to Connect Claude
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option 1: Claude API + Tool Calling
&lt;/h3&gt;

&lt;p&gt;This is the easiest path if you are building your own app or backend. Claude supports tool use through the Messages API: you define the tools, Claude decides when to request one, your app executes it, and then Claude uses the returned data in the final answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Claude + MCP Server
&lt;/h3&gt;

&lt;p&gt;This is ideal if you want Claude clients such as Claude Desktop or Claude Code to connect to your tools through MCP. Claude Code supports MCP connections, and Claude Desktop can connect to local MCP servers; Claude also supports remote MCP servers through custom connectors.&lt;/p&gt;

&lt;p&gt;For most projects, start with tool calling — it is simpler to understand. Then graduate to MCP when you want reusability across AI clients.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1 — Simple Claude Integration with Tool Calling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install the SDK
&lt;/h3&gt;

&lt;p&gt;Anthropic provides an official Python SDK for Claude.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;anthropic requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 2: Create the EODHD function
&lt;/h3&gt;

&lt;p&gt;This is the function your app will execute when Claude asks for stock data.&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;requests&lt;/span&gt;

&lt;span class="n"&gt;EODHD_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_EODHD_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&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;https://eodhd.com/api/real-time/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?api_token=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;EODHD_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;fmt=json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&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="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&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;return&lt;/span&gt; &lt;span class="n"&gt;response&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This function is the bridge between Claude and real market data.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Define the tool for Claude
&lt;/h3&gt;

&lt;p&gt;Claude needs a schema so it knows the tool exists, what it does, and which input it requires. Anthropic's tool use docs emphasize defining tool schemas and descriptions clearly so Claude knows when to call them.&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="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&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;name&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;get_stock_price&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;description&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;Get the latest real-time stock price for a public company ticker symbol using EODHD APIs.&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;input_schema&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;object&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;properties&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;string&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;description&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;Stock ticker symbol, for example AAPL, MSFT, TSLA&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 4: Send the user question to Claude
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&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;role&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;user&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;content&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;What is the current price of Apple stock?&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Anthropic's Messages API is the standard way to construct turns, manage state, and build the tool loop yourself.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Detect Claude's tool request
&lt;/h3&gt;

&lt;p&gt;When Claude decides the question requires live data, it returns a tool-use block instead of answering directly. That is the expected flow in Anthropic's tool use pattern.&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&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;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Typically, Claude will request something equivalent to:&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;"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;"tool_use"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_stock_price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input"&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;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AAPL"&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;h3&gt;
  
  
  Step 6: Execute the function in your backend
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL&lt;/span&gt;&lt;span class="sh"&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;tool_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;At this point, your application has done the real work: it queried EODHD APIs and got live data.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 7: Send the result back to Claude
&lt;/h3&gt;

&lt;p&gt;Now you continue the conversation and give Claude the tool result so it can answer the user with grounded data.&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="n"&gt;follow_up&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&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;role&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;user&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;content&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;What is the current price of Apple stock?&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&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;assistant&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="p"&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;role&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;user&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;content&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="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;tool_result&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;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&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;follow_up&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And now Claude can answer with real market information instead of guessing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuganpcxcjpir5yw1bd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuganpcxcjpir5yw1bd0.png" alt=" " width="681" height="399"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Full Working Example (Claude + EODHD)
&lt;/h2&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;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&lt;/span&gt;

&lt;span class="n"&gt;ANTHROPIC_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;EODHD_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_EODHD_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&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;https://eodhd.com/api/real-time/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?api_token=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;EODHD_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;fmt=json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&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="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&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;return&lt;/span&gt; &lt;span class="n"&gt;response&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="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&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;name&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;get_stock_price&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;description&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;Get the latest real-time stock price for a public company ticker symbol using EODHD APIs.&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;input_schema&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;object&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;properties&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;string&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;description&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;Stock ticker symbol, for example AAPL, MSFT, TSLA&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;user_question&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is the current price of Apple stock?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&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;role&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;user&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_question&lt;/span&gt;
        &lt;span class="p"&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;tool_use_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_stock_price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;tool_use_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tool_use_block&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Claude answered directly:&lt;/span&gt;&lt;span class="sh"&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool_use_block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;tool_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;follow_up&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&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;role&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;user&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_question&lt;/span&gt;
            &lt;span class="p"&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;role&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;assistant&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
            &lt;span class="p"&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;role&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;user&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;content&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="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;tool_result&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;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tool_use_block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Claude final grounded answer:&lt;/span&gt;&lt;span class="sh"&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;follow_up&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the Claude Connection Actually Works
&lt;/h2&gt;

&lt;p&gt;Claude does not call your API directly by magic.&lt;/p&gt;

&lt;p&gt;The flow is this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user asks Claude a question.&lt;/li&gt;
&lt;li&gt;Claude sees that it needs external financial data.&lt;/li&gt;
&lt;li&gt;Claude requests a tool call.&lt;/li&gt;
&lt;li&gt;Your backend executes that tool.&lt;/li&gt;
&lt;li&gt;The tool fetches live data from EODHD APIs.&lt;/li&gt;
&lt;li&gt;Your backend sends the result back to Claude.&lt;/li&gt;
&lt;li&gt;Claude writes the final answer using that live data.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;That means Claude is the reasoning layer. Your tool is the execution layer. And EODHD APIs is the data layer that makes the whole thing useful.&lt;/p&gt;


&lt;h2&gt;
  
  
  If You Want Claude to Access This Through MCP
&lt;/h2&gt;

&lt;p&gt;If you want to expose the same capability through MCP, the idea is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You create an MCP server&lt;/li&gt;
&lt;li&gt;That server exposes a tool such as &lt;code&gt;get_stock_price&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude Desktop, Claude Code, or another MCP-compatible client connects to that server&lt;/li&gt;
&lt;li&gt;Claude can then use the tool through the MCP connection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;MCP servers are the standard way to expose tools to compatible AI clients, and Claude Code plus Claude Desktop both support MCP-based tool connections.&lt;/p&gt;

&lt;p&gt;Conceptually, it looks like this&lt;/p&gt;

&lt;p&gt;Claude / Claude Desktop / Claude Code&lt;br&gt;
↓&lt;br&gt;
MCP Client&lt;br&gt;
↓&lt;br&gt;
MCP Server&lt;br&gt;
↓&lt;br&gt;
EODHD API request&lt;br&gt;
↓&lt;br&gt;
Real-time market data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool calling&lt;/strong&gt; is great when you control the app. &lt;strong&gt;MCP&lt;/strong&gt; is great when you want to make your tool reusable across AI clients and workflows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you're building a custom finance app, tool calling is the fastest way to connect Claude to EODHD APIs.&lt;/li&gt;
&lt;li&gt;If you want a reusable integration that works across AI clients, MCP is the better long-term structure.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why EODHD APIs Is the Layer That Creates Trust
&lt;/h2&gt;

&lt;p&gt;In AI finance products, trust is not created by the model alone.&lt;/p&gt;

&lt;p&gt;It is created by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data freshness&lt;/li&gt;
&lt;li&gt;response consistency&lt;/li&gt;
&lt;li&gt;source reliability&lt;/li&gt;
&lt;li&gt;breadth of market coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why the data provider matters so much.&lt;/p&gt;

&lt;p&gt;A model can explain. A model can summarize. A model can compare.&lt;/p&gt;

&lt;p&gt;But only a strong financial API can provide the live market context that makes those outputs valuable.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;Explore EODHD APIs&lt;/a&gt;&lt;/strong&gt; — it gives Claude something far more important than words. It gives Claude evidence.&lt;br&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the easiest way to connect Claude to a financial API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The easiest way is to define a tool in the Claude Messages API, let Claude request it when needed, execute the API call in your backend, and return the result so Claude can answer with grounded data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between Claude tool calling and MCP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tool calling is the direct API pattern where your application defines and runs tools for Claude. MCP is an open standard for exposing tools and data sources to compatible AI clients like Claude Desktop or Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why use a financial API with Claude?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because Claude alone does not have guaranteed access to live market information. A financial API supplies current prices, fundamentals, and other real-world data needed for reliable finance use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is EODHD APIs useful for AI agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because it gives your AI agent a practical source of financial data that can be called through tools, which makes the assistant more accurate, more useful, and far more product-ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Most AI agents in finance fail for one simple reason: they have intelligence, but they do not have access to reality.&lt;/p&gt;

&lt;p&gt;Claude can reason beautifully. MCP can connect tools elegantly. But EODHD APIs is what gives the system real financial substance.&lt;/p&gt;

&lt;p&gt;If you want to build an AI finance assistant that does more than generate polished guesses, start with the data layer.&lt;/p&gt;

&lt;p&gt;That is where the real product begins.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Tried 33 Data Analytics Courses and These 5 Are the Best</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Sun, 17 Nov 2024 13:21:59 +0000</pubDate>
      <link>https://forem.com/kevin_menesesgonzlez/i-tried-33-data-analytics-courses-and-these-5-are-the-best-4ijb</link>
      <guid>https://forem.com/kevin_menesesgonzlez/i-tried-33-data-analytics-courses-and-these-5-are-the-best-4ijb</guid>
      <description>&lt;p&gt;When I first dipped my toes into the world of data analytics, I was like many others: excited but lost. I remember sitting at my desk, watching hours of tutorials on YouTube, only to realize that half of them were either outdated or too simplistic. My frustration grew, especially one particular night when, after hours of wrestling with a data visualization project, I found myself scrolling through yet another online course catalog, feeling like I’d never find the right path. “Why does learning data analytics have to be so complicated?” I thought.&lt;/p&gt;

&lt;p&gt;That night, as I stared at my screen surrounded by coffee cups and crumpled notes, I promised myself I’d make this work. I dove headfirst into dozens of platforms, testing out courses across Google, DataCamp, and even Harvard’s edX, hoping to find something that could make the process clearer and more practical. After months of trial and error, I finally found a few gems that made a real difference in my journey.&lt;/p&gt;

&lt;p&gt;Here, I’ll break down the top five data analytics courses that were genuinely worth the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="http://datacamp.pxf.io/OrjyqK" rel="noopener noreferrer"&gt;DataCamp: Practical, Hands-On Learning for All Levels&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: DataCamp provides hands-on training focused on practical skills in data analysis, data science, and machine learning. The platform offers over 23 career tracks, including Data Analyst, Data Scientist, and Machine Learning Specialist, designed to meet users at any skill level — from complete beginners to advanced learners.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: DataCamp’s interactive, project-based learning approach makes it feel as if you’re actively working as a data analyst. You’re not just watching tutorials; you’re coding, visualizing, and manipulating data immediately, which reinforces learning. DataCamp also offers specialized tracks for key tools like Python, SQL, and Power BI — essential skills for a data analyst today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Certification Discounts: DataCamp has partnered with Microsoft to offer students a 50% discount on certification exams, making it easier to obtain recognized credentials.&lt;br&gt;
Flexible and Interactive: Courses are highly interactive, allowing you to work on real-world datasets and complete challenges.&lt;br&gt;
Tell me and I forget, teach me and I may remember, involve me and I learn.” — Benjamin Franklin. DataCamp’s interactive style truly embodies this principle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawbacks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subscription-based, which may not appeal to those looking for a single-course purchase.&lt;br&gt;
If you’re looking to start your analytics career with practical, job-ready skills and certification discounts, DataCamp is a stellar choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Google Data Analytics Professional Certificate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Google’s Data Analytics Professional Certificate is aimed at absolute beginners, covering fundamental skills and preparing you for entry-level positions in data analysis.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: Developed by Google, the course teaches practical skills like data cleaning, data visualization, and basic statistical analysis. It’s a great introduction for those who are new to the field and provides a broad overview of core concepts that every data analyst should know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beginner-Friendly: Structured in a way that makes complex concepts easy to grasp.&lt;br&gt;
Practical Knowledge: Includes various projects and case studies that give students hands-on experience.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;Not an Industry-Recognized Certification: The certificate is not widely acknowledged by recruiters as an official qualification, but it serves as an excellent starting point.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The journey of a thousand miles begins with one step.” — Lao Tzu. Google’s certificate is that first step for anyone entering the data analytics world.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’re a beginner wanting a foundational overview, this certificate is a solid, approachable option.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Microsoft Power BI and SQL Certifications
&lt;/h2&gt;

&lt;p&gt;Purpose: Microsoft offers certifications for specific tools like Power BI (PL-300) and SQL (DP-300), which are highly valued in the data analytics industry.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: These certifications are industry-recognized, often required by employers, and cover both data visualization with Power BI and data management with SQL. This makes them essential for those wanting to demonstrate strong technical proficiency and a solid grasp of two in-demand tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Globally Recognized: Having a Microsoft certification on your resume can set you apart from others and even fulfill job prerequisites.&lt;br&gt;
Free Learning Pathways: Microsoft provides free study resources to prepare for these exams, making it accessible to everyone.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;Cost and Difficulty: Exam fees can add up ($165 for Power BI and $99 for Azure Fundamentals), and the exams require in-depth preparation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Success is where preparation and opportunity meet.” — Bobby Unser. Preparing for Microsoft certifications is challenging but incredibly rewarding for career growth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For those serious about a data analytics career, mastering Power BI and SQL with Microsoft’s certifications can significantly enhance your employability.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Tableau Certified Data Analyst
&lt;/h2&gt;

&lt;p&gt;Purpose: This certification validates your proficiency with Tableau, one of the top data visualization tools, and is highly valued by companies seeking candidates with advanced data visualization skills.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: The Tableau Certified Data Analyst credential proves your ability to analyze data and create visually compelling, interactive dashboards. This certification is particularly suited for business intelligence roles where data presentation is key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Highly Recognized Certification: Validates your ability to use Tableau, which is one of the most in-demand visualization tools.&lt;br&gt;
Practical Exam: The certification requires a hands-on test, so your knowledge is proven through real tasks.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;High Exam Cost: The certification exam is expensive at $250 and requires a subscription to Tableau’s learning resources. However, you can also prepare on DataCamp.&lt;br&gt;
“A picture is worth a thousand words.” — Fred R. Barnard. Tableau’s visualization capabilities bring data to life, making it easier for stakeholders to understand complex information.&lt;/p&gt;

&lt;p&gt;For those focused on a career in data visualization, Tableau certification is an asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. HarvardX Data Science Professional Certificate (edX
&lt;/h2&gt;

&lt;p&gt;)&lt;br&gt;
Purpose: HarvardX’s Data Science Professional Certificate provides a rigorous academic foundation in data science, covering programming in R, statistical concepts, and machine learning.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: Taught by professors from Harvard, this program provides a high-caliber education and is recognized globally. It’s ideal for those interested in a thorough and respected foundation in data science, including data analysis, probability, and machine learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Academic Prestige: A certification from HarvardX stands out on any resume.&lt;br&gt;
Comprehensive Curriculum: Covers not only analytics but also deeper statistical methods and machine learning.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;High Cost and Time Commitment: The certification costs over $1,200 and can take a year or more to complete if studied part-time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Education is the most powerful weapon which you can use to change the world.” — Nelson Mandela. This certification offers a transformative learning experience, backed by the academic rigor of Harvard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is perfect for those willing to invest in an intensive, high-quality education to gain in-depth data science knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Choosing the right course in data analytics can be daunting with so many options out there. If you’re looking to dive right in and start building skills that you can apply immediately, DataCamp offers an excellent balance of practical skills and recognized certifications. For entry-level fundamentals, Google’s certificate is a great place to begin, while Microsoft and Tableau certifications add significant value for specific technical skills. And if you’re looking for a comprehensive, prestigious academic experience, HarvardX provides exactly that.&lt;/p&gt;

&lt;p&gt;To anyone just beginning this journey, remember: “The only limit to our realization of tomorrow is our doubts of today.” — Franklin D. Roosevelt. Dive into learning, and each of these courses can become a stepping stone to your success in data analytics.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://datacamp.pxf.io/OrjyqK" rel="noopener noreferrer"&gt;Datacamp Plataform&lt;/a&gt;&lt;br&gt;
Follow me on Linkedin&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/kevin-meneses-897a28127/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/kevin-meneses-897a28127/&lt;/a&gt;&lt;br&gt;
Medium&lt;br&gt;
&lt;a href="https://medium.com/@kevinmenesesgonzalez/subscribe" rel="noopener noreferrer"&gt;https://medium.com/@kevinmenesesgonzalez/subscribe&lt;/a&gt;&lt;br&gt;
Subscribe to the Data Pulse Newsletter&lt;br&gt;
&lt;a href="https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720" rel="noopener noreferrer"&gt;https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720&lt;/a&gt;&lt;br&gt;
Join my Patreon Community &lt;a href="https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink" rel="noopener noreferrer"&gt;https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink&lt;/a&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>analytics</category>
      <category>datacamp</category>
      <category>python</category>
    </item>
    <item>
      <title>How I Automated My Workflow by Connecting Python to Google Sheets API</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Tue, 12 Nov 2024 12:22:30 +0000</pubDate>
      <link>https://forem.com/kevin_menesesgonzlez/how-i-automated-my-workflow-by-connecting-python-to-google-sheets-api-3l30</link>
      <guid>https://forem.com/kevin_menesesgonzlez/how-i-automated-my-workflow-by-connecting-python-to-google-sheets-api-3l30</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A few months ago, I faced a familiar problem. I was working on a project where I needed to manage a large dataset that required frequent updates and collaboration. At first, I kept everything in Excel, thinking it would be simple enough. But the more data I added, the slower Excel became. I’d save my work, try to update a few cells, and watch as it took minutes to respond. It was a nightmare. Every time I tried collaborating with a team member, I’d have to send over a new version of the file, which quickly became chaotic and prone to mistakes. I realized that I needed a way to update and share data in real-time, something that Excel just couldn’t handle effectively with large datasets.&lt;/p&gt;

&lt;p&gt;That’s when I discovered the power of Google Sheets combined with Python. Google Sheets offers the flexibility of cloud storage, allowing multiple users to access and update data simultaneously, while Python offers powerful data manipulation capabilities. Using the Google Sheets API, I was able to seamlessly integrate Python with Google Sheets, creating a system that automatically updated my data, managed real-time changes, and eliminated version conflicts. Here’s a guide to how I set it up, with examples to help you get started with your own projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  *&lt;em&gt;The Solution: *&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Using the Google Sheets API with Python&lt;br&gt;
Connecting Python to Google Sheets allows you to automate tasks, fetch data, and update sheets effortlessly. The Google Sheets API enables programmatic access to Google Sheets, providing endless possibilities for data management.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step-by-Step Guide to Setting Up Google Sheets API with Python
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Set Up Your Google Cloud Project
&lt;/h3&gt;

&lt;p&gt;To begin, you’ll need to create a project in the Google Cloud Console:&lt;/p&gt;

&lt;p&gt;Go to the Google Cloud Console and create a new project.&lt;br&gt;
Enable the Google Sheets API and the Google Drive API for this project, as you’ll need both for full access.&lt;br&gt;
Go to Credentials and click on Create Credentials. Choose OAuth client ID or Service Account depending on your requirements. For automated scripts without user interaction, Service Account is recommended.&lt;br&gt;
Once the credentials are created, download the JSON file containing your service account key. Keep this file secure, as it provides access to your Google Sheets.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Install Required Libraries in Python
&lt;/h3&gt;

&lt;p&gt;To work with the Google Sheets API, install the following libraries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client spread
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;google-auth and google-api-python-client are essential for connecting with Google’s APIs.&lt;br&gt;
gspread is a Python library that simplifies interactions with Google Sheets.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Obtain Permissions to Access Google Sheets
&lt;/h3&gt;

&lt;p&gt;Before you can interact with Google Sheets through the API, you need to configure the permissions properly to allow your service account or OAuth credentials to access specific sheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share Your Google Sheet with the Service Account Email:&lt;/strong&gt;&lt;br&gt;
If you are using a service account, you’ll notice that the JSON file contains an email address (something like &lt;a href="mailto:your-service-account@your-project.iam.gserviceaccount.com"&gt;your-service-account@your-project.iam.gserviceaccount.com&lt;/a&gt;). For the service account to access your Google Sheets, you must share the sheet with this email address.&lt;br&gt;
Open the Google Sheet you want to use.&lt;br&gt;
Click Share in the top-right corner of the sheet.&lt;br&gt;
Enter the service account email address and set the permissions to Editor.&lt;br&gt;
Click Send to save these changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Ensure Proper API Scopes:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
When setting up your Google Cloud project, make sure you included the necessary API scopes to allow reading and writing to Google Sheets. In your Python code, use these scopes to ensure proper permissions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scope = [&lt;br&gt;
    "https://www.googleapis.com/auth/spreadsheets",  # For accessing and editing Google Sheets&lt;br&gt;
    "https://www.googleapis.com/auth/drive"  # For accessing Google Drive&lt;br&gt;
]&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Authenticate and Connect to Your Google Sheet
&lt;/h3&gt;

&lt;p&gt;Here’s a Python script to authenticate and connect to your Google Sheet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import gspread
from google.oauth2.service_account import Credentials

# Define the scope and authenticate using the JSON key file
scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
credentials = Credentials.from_service_account_file("path/to/your/credentials.json", scopes=scope)

# Authorize the client and open the Google Sheet
client = gspread.authorize(credentials)
sheet = client.open("Your Google Sheet Name").sheet1  # Access the first sheet
Replace "path/to/your/credentials.json" with the path to your JSON file, and "Your Google Sheet Name" with the name of your Google Sheet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Examples of Google Sheets API Functionalities
&lt;/h2&gt;

&lt;p&gt;Once connected, you can perform a wide range of operations on your Google Sheet. Here are some useful examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 1: Read Data from Google Sheets&lt;/strong&gt;&lt;br&gt;
To retrieve data from a specific range of cells:&lt;/p&gt;
&lt;h3&gt;
  
  
  Fetch all data from the sheet as a list of lists
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data = sheet.get_all_values()
print("All data:", data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Fetch data from specific cell range
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;specific_data = sheet.get("A1:C10")  # Adjust the range as needed
print("Specific data:", specific_data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This code retrieves all the data in the sheet or a specific range, displaying it as a list of lists.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example 2: Write Data to Google Sheets
&lt;/h3&gt;

&lt;p&gt;To add data to specific cells:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Update a single cell
sheet.update("B2", "New Data")

# Update a range of cells
sheet.update("A1:C1", [["Header1", "Header2", "Header3"]])

# Append a new row at the end of the sheet
sheet.append_row(["Row1 Data", "Row2 Data", "Row3 Data"])
These commands allow you to write to individual cells, multiple cells, or append entire rows of data.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 3: Clear Data from Google Sheets
&lt;/h3&gt;

&lt;p&gt;If you need to clear data in a specific range:&lt;/p&gt;

&lt;h4&gt;
  
  
  Clear data from a specific range
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sheet.batch_clear(["A2:C100"])  # Adjust the range as needed
This code clears all values within the specified range, which is useful for cleaning up data before importing new information.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 4: Automate Data Updates
&lt;/h3&gt;

&lt;p&gt;If you want to automate updates to your data, for example, appending daily statistics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import datetime

# Append a new row with the current date and dummy statistics
today = datetime.date.today().isoformat()
stats = [today, 123, 456, 789]  # Replace with actual data
sheet.append_row(stats)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script appends a new row with the current date and data points, making it ideal for tracking daily changes or automating periodic updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using Python to interact with the Google Sheets API has transformed the way I handle large datasets, saving time and reducing errors from manual work. Whether you need to automate data updates, retrieve real-time information, or simply make collaborative work easier, connecting Python to Google Sheets opens up a world of possibilities.&lt;/p&gt;

&lt;p&gt;With these examples, you should be well-equipped to start automating your own workflows and move away from outdated methods that slow down your productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow me on Linkedin&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/kevin-meneses-897a28127/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/kevin-meneses-897a28127/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;and Medium&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://medium.com/@kevinmenesesgonzalez/subscribe" rel="noopener noreferrer"&gt;https://medium.com/@kevinmenesesgonzalez/subscribe&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Subscribe to the Data Pulse Newsletter&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720" rel="noopener noreferrer"&gt;https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join my Patreon Community &lt;a href="https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink" rel="noopener noreferrer"&gt;https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>googlecloud</category>
      <category>data</category>
    </item>
  </channel>
</rss>
