<?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: Telesherpa</title>
    <description>The latest articles on DEV Community by Telesherpa (@telesherpa).</description>
    <link>https://dev.to/telesherpa</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%2F4147952%2Fed0a9f0d-2174-4de9-8940-66a89c245e24.png</url>
      <title>DEV Community: Telesherpa</title>
      <link>https://dev.to/telesherpa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/telesherpa"/>
    <language>en</language>
    <item>
      <title>Telesherpa knows the time now: time series for everything that moves or changes</title>
      <dc:creator>Telesherpa</dc:creator>
      <pubDate>Thu, 08 Oct 2026 19:14:01 +0000</pubDate>
      <link>https://dev.to/telesherpa/telesherpa-knows-the-time-now-time-series-for-everything-that-moves-or-changes-5fm7</link>
      <guid>https://dev.to/telesherpa/telesherpa-knows-the-time-now-time-series-for-everything-that-moves-or-changes-5fm7</guid>
      <description>&lt;p&gt;Most things in a business have a current state. A vehicle is in Porto. A tank is half full. A machine is running.&lt;/p&gt;

&lt;p&gt;What's missing is the question that comes right after: &lt;strong&gt;Where was it before? How has the value developed? Since when has it been like this?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is exactly what time series in Telesherpa are for, starting now.&lt;/p&gt;

&lt;h2&gt;
  
  
  A value that remembers when it applied
&lt;/h2&gt;

&lt;p&gt;Until now, an object in Telesherpa had one value per property — the current one. With time series, a property keeps its &lt;strong&gt;history&lt;/strong&gt;. Every value belongs to a point in time, and all of those points stay retrievable.&lt;/p&gt;

&lt;p&gt;The example we're seeing in production right now: &lt;strong&gt;location&lt;/strong&gt;. Open it and you see not just the last point, but the whole route.&lt;/p&gt;

&lt;h2&gt;
  
  
  Location as a route
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8odu41xm4yqq71jw08or.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8odu41xm4yqq71jw08or.jpg" alt="Location with time series: map showing the route travelled and the value table" width="800" height="698"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The "Location" window shows you two things side by side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The map&lt;/strong&gt; with the route travelled. The green dot is the start of the selected period, the red one the end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The table&lt;/strong&gt; below it with time and value. Every row is a reported location, here at one-minute intervals — for example &lt;code&gt;2026-10-08 10:14&lt;/code&gt; with the coordinates &lt;code&gt;41.118885, -8.633754&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That answers a question that used to cost a lot of back-and-forth: &lt;em&gt;Where was the vehicle at ten past ten?&lt;/em&gt; You can see it in the table without opening another system.&lt;/p&gt;

&lt;h2&gt;
  
  
  You choose the period
&lt;/h2&gt;

&lt;p&gt;At the top of the window you choose how far back you want to look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All&lt;/strong&gt;, &lt;strong&gt;24 h&lt;/strong&gt;, &lt;strong&gt;7 d&lt;/strong&gt; or &lt;strong&gt;30 d&lt;/strong&gt; with one click&lt;/li&gt;
&lt;li&gt;or a &lt;strong&gt;custom period&lt;/strong&gt; with from and to, via the calendar icon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clicking "Show" reloads both map and table. The selected range is displayed at the top right of the window, so you always see what you're looking at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for a platform built for people and agents
&lt;/h2&gt;

&lt;p&gt;Telesherpa was built from the start so that people and agents use the same data. A time series is therefore not just a chart for you.&lt;/p&gt;

&lt;p&gt;An agent running a business needs the history even more urgently than you do. It should notice that a vehicle has been standing in the same spot for hours, that a value has been rising for days, or that a delivery is deviating from the planned route. Without history it only sees the moment. With history it sees the development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not just for locations
&lt;/h2&gt;

&lt;p&gt;Location is the most vivid example, but the idea applies to any property that changes: temperatures, fill levels, meter readings, status. Anywhere you previously had only the last value and kept the rest in your head or in a spreadsheet, Telesherpa can now keep the history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Time series are available in the platform as of now. If you already use Telesherpa, you'll find the history right on the object, wherever a value supports time series. If not: one account is enough — and your agent is welcome to take a look first.&lt;/p&gt;

</description>
      <category>telesherpa</category>
      <category>timeseries</category>
      <category>ai</category>
      <category>ontology</category>
    </item>
    <item>
      <title>Zero to Production: An AI Agent Onboards Itself, Builds the Business Objects, and Ships a Workflow Its Staff Use That Same Afternoon</title>
      <dc:creator>Telesherpa</dc:creator>
      <pubDate>Wed, 30 Sep 2026 20:23:33 +0000</pubDate>
      <link>https://dev.to/telesherpa/zero-to-production-an-ai-agent-onboards-itself-builds-the-business-objects-and-ships-a-workflow-3178</link>
      <guid>https://dev.to/telesherpa/zero-to-production-an-ai-agent-onboards-itself-builds-the-business-objects-and-ships-a-workflow-3178</guid>
      <description>&lt;p&gt;Most "AI for business processes" stories are about agents using software that a developer already built for them — filling in a form here, summarizing a record there. This one is about an agent that had nothing to start with — no account, no object model, no form — and ended it with a real employee, on a real phone, submitting a branded damage report that same afternoon. Every step in between was the agent's own work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The starting point
&lt;/h2&gt;

&lt;p&gt;Telesherpa is an ontology-based platform with roots in field-service management. Its premise is that most operational software is the same handful of moving parts — typed objects, forms, documents, notifications, mobile access — reconfigured per industry rather than rebuilt. Car rental is one such vertical, and everything from reservation to a vehicle damage report is fair game as a first workflow.&lt;/p&gt;

&lt;p&gt;The part worth dwelling on isn't the workflow. It's that nothing above needed a human to exist first — not the account that built it, not the objects it operates on, not the form, not the document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nobody opened a browser to get the agent an account
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;register()&lt;/code&gt; creates the account, &lt;code&gt;activate()&lt;/code&gt; redeems the seven-digit code in its inbox, &lt;code&gt;login()&lt;/code&gt; exchanges client credentials for a bearer token. &lt;code&gt;auth_status&lt;/code&gt; says plainly whether the token is valid and how much of the platform is visible. None of this happened in a browser, and none of it was a service account handed down by IT — the agent onboarded itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The agent defined the business before it defined the form
&lt;/h2&gt;

&lt;p&gt;A form needs something to be a form about. Before "damage report" could be a set of fields a renter fills in, it had to be a typed object in the ontology — property definitions and an object type, living in a scope for this customer's car-rental vertical. That model didn't pre-exist; the agent built it, the same way it later built the form. There's no seam between "defining what a damage report is" and "defining what filling one out looks like" — both are the same agent, the same kind of tool call, one layer apart.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then the form, the branded document, and the send action
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The form&lt;/strong&gt; — one tool call (&lt;code&gt;onto_formdef_save&lt;/code&gt;) defines every field, widget and dropdown option against the object type the agent just created.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The branded document&lt;/strong&gt; — an Excel template with &lt;code&gt;##key##&lt;/code&gt; placeholders, iterated conversationally, revised against feedback, wired in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The send action&lt;/strong&gt; — a &lt;code&gt;buttons&lt;/code&gt; property turns a submission into an email with the generated PDF attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The test&lt;/strong&gt; — the agent submitted the form itself before any human saw it, catching layout and photo-placeholder issues first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also found the template mechanism wasn't documented anywhere, and filed a service request rather than quietly relying on undocumented behavior — the same instinct that makes write access to your object model and forms trustworthy in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "done" looked like
&lt;/h2&gt;

&lt;p&gt;Not a deploy — a real person on a real phone, opening the PWA, filling out the exact form the agent had just defined on an object type that, an hour earlier, hadn't existed, photographing a scratch, and hitting send. The photo landed inside the generated PDF automatically. The moment the object model, form and document were saved, they were live on every phone an employee already carries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters beyond one form
&lt;/h2&gt;

&lt;p&gt;Strip away the specifics and the pattern is: account → object model → form → branded document → mobile access, every layer expressed as MCP tool calls an agent can run from a conversation. The claim worth sitting with isn't "AI can fill out your forms" or even "build your forms" — it's that a customer's own agent can stand up an entire new piece of their business, data model included, in an afternoon, and staff can be using it before that afternoon is over.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>ontology</category>
      <category>fieldservice</category>
    </item>
    <item>
      <title>Giving a LangChain Agent Real-World Facility-Management Tools via MCP</title>
      <dc:creator>Telesherpa</dc:creator>
      <pubDate>Mon, 28 Sep 2026 19:36:16 +0000</pubDate>
      <link>https://dev.to/telesherpa/giving-a-langchain-agent-real-world-facility-management-tools-via-mcp-4g1i</link>
      <guid>https://dev.to/telesherpa/giving-a-langchain-agent-real-world-facility-management-tools-via-mcp-4g1i</guid>
      <description>&lt;p&gt;Most "give your agent tools" tutorials hand it a calculator or a weather API. Useful for learning the mechanics, but it doesn't tell you what happens when an agent gets access to a real operational system — one with access control, multi-tenancy, and objects that map to actual physical things (buildings, vehicles, machines).&lt;/p&gt;

&lt;p&gt;This post walks through connecting a LangChain agent to &lt;a href="https://www.telesherpa.com" rel="noopener noreferrer"&gt;Telesherpa&lt;/a&gt;, an ontology-based platform for facility, fleet and field-service management, over the &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; (MCP). By the end, the agent can query and modify real ontology objects — not toy data — using nothing but its own reasoning and the tools MCP hands it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this pairing is interesting
&lt;/h2&gt;

&lt;p&gt;Two things make this a useful example rather than a marketing demo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The tool surface is large and role-gated.&lt;/strong&gt; Telesherpa exposes on the order of 170 MCP tools, but which ones a given agent sees depends on its role — a &lt;code&gt;public&lt;/code&gt; caller sees a handful of self-registration tools, an authenticated caller with the right scope sees object CRUD, reports, automation triggers, structured image filing, and more. That's a realistic shape for enterprise software, and a good stress test for whether an agent framework's tool-loading actually scales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding requires zero human intervention.&lt;/strong&gt; The platform is self-registering: &lt;code&gt;register()&lt;/code&gt;, &lt;code&gt;activate()&lt;/code&gt; (a 7-digit email code), and &lt;code&gt;login()&lt;/code&gt; are all public MCP tools. An agent can go from nothing to an authenticated session without a human ever opening a browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The connection
&lt;/h2&gt;

&lt;p&gt;LangChain's official &lt;a href="https://github.com/langchain-ai/langchain-mcp-adapters" rel="noopener noreferrer"&gt;&lt;code&gt;langchain-mcp-adapters&lt;/code&gt;&lt;/a&gt; package speaks MCP's Streamable HTTP transport natively, including custom headers — which is what you need for Bearer-token auth against a remote server:&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;from&lt;/span&gt; &lt;span class="n"&gt;langchain_mcp_adapters.client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MultiServerMCPClient&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;MultiServerMCPClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;telesherpa&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;transport&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;http&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;url&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;https://mcp.telesherpa.com&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;headers&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;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;token&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="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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_tools&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire integration surface. &lt;code&gt;tools&lt;/code&gt; is now a list of LangChain-compatible tools, generated directly from the server's live tool catalog — no manual schema mapping, no maintaining a wrapper per endpoint. If Telesherpa adds a tool next week, your agent sees it next week too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting a token without a browser
&lt;/h2&gt;

&lt;p&gt;Before that snippet works you need &lt;code&gt;token&lt;/code&gt;. Since every step is itself an MCP tool call, an agent can do this on its own:&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="c1"&gt;# 1. register — creates an account, requires accept_terms=true
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;register&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;email&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;...&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;accept_terms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...})&lt;/span&gt;

&lt;span class="c1"&gt;# 2. activate — redeem the 7-digit code emailed to that address
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;activate&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;code&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;1234567&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# 3. login — exchange client credentials for a bearer token
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;login&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;client_id&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;...&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;client_secret&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;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;          &lt;span class="c1"&gt;# valid ~10h
&lt;/span&gt;&lt;span class="n"&gt;refresh_token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;refresh_token&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;&lt;code&gt;auth_status&lt;/code&gt; is worth calling first in any new session — it tells you plainly whether your token is valid, which roles it carries, and how many of the total tools are currently visible to you. Cheaper than guessing from a 401.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it to work
&lt;/h2&gt;

&lt;p&gt;With tools loaded, a standard LangChain agent can now reason over real ontology objects:&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;from&lt;/span&gt; &lt;span class="n"&gt;langchain.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;create_agent&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai:gpt-4.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ainvoke&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&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;List the buildings in my current scope and flag any &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;that are missing a structured image category.&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;Under the hood this typically resolves to a couple of tool calls — something like &lt;code&gt;onto_type_show("building")&lt;/code&gt; to enumerate objects, then &lt;code&gt;onto_file_structured(object_id)&lt;/code&gt; per building to check which image categories are filled. The agent picks the sequence; you didn't hardcode it.&lt;/p&gt;

&lt;p&gt;What makes this more than a search-and-summarize demo is that the same tool surface supports &lt;em&gt;writes&lt;/em&gt;: creating objects, executing defined actions on them (check-in/check-out, service-order creation, form submission), setting properties, and — critically for anything touching real operations — a role-based access model that determines what an agent is even allowed to attempt. The interesting engineering problem isn't "can the agent call a tool," it's "does the permission boundary hold when the caller is non-human."&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond LangChain
&lt;/h2&gt;

&lt;p&gt;The same MCP server works the same way with CrewAI, LlamaIndex, and Microsoft's Agent Framework, since MCP is transport- and framework-agnostic by design — the tool definitions and auth flow don't change, only the client-side plumbing does. Working examples for each (some verified, some flagged as in-progress) are in &lt;a href="https://github.com/telesherpa/telesherpa-quickstarts" rel="noopener noreferrer"&gt;&lt;code&gt;telesherpa/telesherpa-quickstarts&lt;/code&gt;&lt;/a&gt;. The full capability reference — object model, scopes, automation, structured image filing, forms — is in &lt;a href="https://github.com/telesherpa/skill-telesherpa-com" rel="noopener noreferrer"&gt;&lt;code&gt;telesherpa/skill-telesherpa-com&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you're building agents that need to do something in the physical world — not just answer questions about it — this is roughly the shape that "agent-ready" enterprise software needs to take: a documented, self-registering, role-scoped MCP surface, not a REST API with an OpenAPI spec bolted on after the fact.&lt;/p&gt;

</description>
      <category>langchain</category>
      <category>mcp</category>
      <category>ai</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
