<?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: Coryntas</title>
    <description>The latest articles on DEV Community by Coryntas (coryntas).</description>
    <link>https://dev.to/coryntas</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%2Forganization%2Fprofile_image%2F14224%2F9fe6fbc8-229d-4a6e-aae5-45c8582f2967.png</url>
      <title>DEV Community: Coryntas</title>
      <link>https://dev.to/coryntas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/coryntas"/>
    <language>en</language>
    <item>
      <title>Your Team Got Faster With AI. Why Is Your First Move a Layoff?</title>
      <dc:creator>Vincent Tuan</dc:creator>
      <pubDate>Sat, 19 Sep 2026 15:30:10 +0000</pubDate>
      <link>https://dev.to/coryntas/your-team-got-faster-with-ai-why-is-your-first-move-a-layoff-5676</link>
      <guid>https://dev.to/coryntas/your-team-got-faster-with-ai-why-is-your-first-move-a-layoff-5676</guid>
      <description>&lt;p&gt;Suppose your implementation team finally gets an AI workflow working. It produces useful first drafts of integrations, catches routine mistakes, and cuts down the time spent writing documentation. Engineers still review the output, but the improvement holds up after review.&lt;/p&gt;

&lt;p&gt;At the next budget meeting, someone asks whether you still need the whole team.&lt;/p&gt;

&lt;p&gt;You also have customers waiting to go live. A deal is stuck because nobody has time to build an integration. An experienced engineer keeps getting pulled into the same onboarding problem, which everyone agrees should have been fixed months ago.&lt;/p&gt;

&lt;p&gt;I’d want to see what that team could deliver before cutting it.&lt;/p&gt;

&lt;p&gt;Assume the AI works exactly as advertised. Why would a company with unfinished, valuable work make getting rid of the people who can now do it its first priority?&lt;/p&gt;

&lt;p&gt;The salary savings are easier to put in a spreadsheet. I understand the attraction, especially when cash is tight. A CFO can estimate what removing two positions saves next quarter. The head of implementation has a harder argument: keep those people, give them different work, and expect more customers to get through onboarding.&lt;/p&gt;

&lt;p&gt;One number looks solid. The other needs assumptions.&lt;/p&gt;

&lt;p&gt;But the apparent certainty is misleading. The payroll reduction is measurable; the effect of losing those people is still a forecast. Someone is assuming the remaining team can absorb the exceptions, cover absences, and handle the next awkward customer without slowing delivery. Those assumptions deserve scrutiny too.&lt;/p&gt;

&lt;p&gt;A growth proposal shouldn’t have to prove every future dollar while a cost-cutting proposal gets to ignore the work left behind.&lt;/p&gt;

&lt;p&gt;Start with what actually became faster. If AI writes an integration in an afternoon, that’s useful. It doesn’t tell you whether the customer has agreed on what the integration should do.&lt;/p&gt;

&lt;p&gt;In our example, sales promised to sync “active customers.” The customer’s finance team and account managers mean different things by &lt;em&gt;active&lt;/em&gt;. An engineer has to find that out, get a decision, and keep it from becoming a production problem. Generating the connector was only part of the job.&lt;/p&gt;

&lt;p&gt;Now suppose the AI gets good at flagging that ambiguity too. Fine. Give the engineer a better brief. There’s still a waiting customer whose project could move forward with the time saved.&lt;/p&gt;

&lt;p&gt;The argument for keeping someone should survive improvements in the technology. If it depends entirely on AI continuing to make mistakes, it’s a weak argument.&lt;/p&gt;

&lt;p&gt;The more interesting question is whether that employee can now take responsibility for work the company has been neglecting. That might mean handling another implementation, fixing the recurring onboarding problem, or turning a custom integration into something the next ten customers can use.&lt;/p&gt;

&lt;p&gt;There is evidence that working with AI can improve performance, although it doesn’t settle staffing decisions. The 2023 NBER working paper &lt;em&gt;Generative AI at Work&lt;/em&gt; reported roughly 14% more issues resolved per hour among customer support agents with AI assistance. Gains were concentrated among less experienced and lower-skilled workers, with minimal gains among the most experienced and highly skilled. &lt;a href="https://www.nber.org/papers/w31161" rel="noopener noreferrer"&gt;Read the study&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The P&amp;amp;G experiment in &lt;em&gt;The Cybernetic Teammate&lt;/em&gt; is uncomfortable for a simple “keep every team intact” argument: individuals with AI matched teams without AI on the innovation tasks studied. It also found that AI helped people produce proposals combining technical and commercial perspectives, and that human judgment retained value in selecting ideas. The results give leaders reasons to reconsider how work is divided. They don’t establish what staffing decision will grow your particular business. &lt;a href="https://pubsonline.informs.org/doi/abs/10.1287/orsc.2025.20702" rel="noopener noreferrer"&gt;Read the study&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There’s a less comfortable part of this conversation that rarely fits into an AI productivity presentation.&lt;/p&gt;

&lt;p&gt;Imagine you’re the employee who built the workflow. You tried the tools, figured out where they failed, and wrote down a process other people could use. Management celebrates it. Then a colleague loses their job because the team is now more efficient.&lt;/p&gt;

&lt;p&gt;A few weeks later, management asks everyone to share more automation ideas.&lt;/p&gt;

&lt;p&gt;You might have some hesitation.&lt;/p&gt;

&lt;p&gt;You may still use AI. You might just stop advertising how much time it saves. Or avoid spending your own time teaching others a method whose reward appears to be another staffing review.&lt;/p&gt;

&lt;p&gt;That is a plausible response to the incentives. If leadership wants people to expose inefficiencies and share what they know, it needs to think about what happens to the people who cooperate.&lt;/p&gt;

&lt;p&gt;I wouldn’t solve this with a promise that nobody will ever lose a job. A company may not be able to keep it. I’d start with a narrower commitment people can evaluate: during a defined trial, use the released time to clear specific customer work, involve the team in choosing it, and judge the result before deciding what comes next.&lt;/p&gt;

&lt;p&gt;Give people working hours to learn. Credit the employee who improves the shared process, including when someone else gets the resulting productivity gain. Be clear about which responsibilities are changing. Don’t announce that everyone is becoming more strategic and leave them with the same workload plus responsibility for checking AI output.&lt;/p&gt;

&lt;p&gt;Back at our software company, this requires some fairly ordinary management work.&lt;/p&gt;

&lt;p&gt;Pick the customers already waiting for implementation and confirm they’re ready to proceed. Assign owners. Agree on what has to be working for each customer to accept delivery. Reserve time for those projects by removing other commitments.&lt;/p&gt;

&lt;p&gt;The AI can prepare project briefs from approved records, draft mappings, propose tests, and assemble documentation. Engineers can work through unresolved requirements with customers and check the parts where errors would be expensive. They should adjust that division as they learn what the system handles reliably.&lt;/p&gt;

&lt;p&gt;A customer needs to be using the product sooner. If the team generates twice as many drafts and every draft waits a week for the same senior engineer, you’ve given that engineer a bigger queue.&lt;/p&gt;

&lt;p&gt;So give the senior engineer time to improve the tests and review process. Have another employee turn the recurring onboarding issue into a documented fix. Let the people closest to the work tell you where the hours actually go; a manager’s guess from a ticket dashboard may miss most of the delay.&lt;/p&gt;

&lt;p&gt;“We’ll use AI to grow” needs to get this specific.&lt;/p&gt;

&lt;p&gt;When evaluating an enterprise AI provider such as &lt;a href="https://coryntas.com" rel="noopener noreferrer"&gt;Coryntas&lt;/a&gt;, bring the work your team keeps postponing: the integration nobody has time to build, the customers waiting for onboarding, the recurring problem everyone keeps fixing by hand. Ask what your existing team could get done with the right support.&lt;/p&gt;

&lt;p&gt;Perhaps it can bring waiting customers live sooner, accept an integration-heavy deal it previously couldn’t service, or support additional customers without immediately hiring another implementation team.&lt;/p&gt;

&lt;p&gt;These are different bets. Choose the one you can test against real demand.&lt;/p&gt;

&lt;p&gt;For this example, a sixty-day trial could be enough to see whether comparable implementations are moving faster, how much correction they require, and whether the backlog is shrinking. It would not establish a long-term revenue effect by itself.&lt;/p&gt;

&lt;p&gt;Count training, software, review, and maintenance costs. Check working hours too. If the team is finishing more because everyone works later, the experiment hasn’t shown what you think it has.&lt;/p&gt;

&lt;p&gt;Finance belongs in that review. Ask it to help compare the contribution from additional work with the savings from a smaller team, over a period the company can actually afford.&lt;/p&gt;

&lt;p&gt;And follow the result beyond engineering. Earlier delivery only brings revenue forward where the commercial terms make that true. An integration only helps win business if customers want it. A customer waiting on their own security review may remain blocked no matter how quickly your team writes code.&lt;/p&gt;

&lt;p&gt;Keeping people is not automatically a growth strategy. Neither is buying them AI tools.&lt;/p&gt;

&lt;p&gt;There are businesses with too little cash to wait for a redeployment experiment. There are teams whose workload has genuinely disappeared, with no useful adjacent work they can take on soon enough. Leaders have to make difficult decisions in those situations, and an article about augmentation shouldn’t pretend otherwise.&lt;/p&gt;

&lt;p&gt;But that is a different situation from a company with demand it cannot serve, problems it cannot get around to fixing, and employees who have just found a way to free up some time.&lt;/p&gt;

&lt;p&gt;In that company, I’d want the CEO to spend at least as much effort finding a productive use for those people as calculating the savings from removing them.&lt;/p&gt;

&lt;p&gt;There is a hard decision hiding inside that request. Retaining the team means management has to choose work, clear obstacles, and take responsibility if the additional capacity produces little value. It is no longer enough to report that employees are using AI.&lt;/p&gt;

&lt;p&gt;The implementation manager should come to the next budget meeting with named customers, delivery dates, the work being dropped, and an estimate of what completing those projects is worth. The CFO should challenge it. The team should have a chance to deliver it.&lt;/p&gt;

&lt;p&gt;If the case falls apart, deal with that honestly.&lt;/p&gt;

&lt;p&gt;But if the company can finally serve the customers it has kept waiting, why would making the team smaller be the obvious next move?&lt;/p&gt;

</description>
      <category>management</category>
      <category>productivity</category>
      <category>leadership</category>
      <category>ai</category>
    </item>
    <item>
      <title>Your Team Has AI. Why Are You Still Chasing the Work?</title>
      <dc:creator>Vincent Tuan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 02:48:57 +0000</pubDate>
      <link>https://dev.to/coryntas/your-team-has-ai-why-are-you-still-chasing-the-work-55j9</link>
      <guid>https://dev.to/coryntas/your-team-has-ai-why-are-you-still-chasing-the-work-55j9</guid>
      <description>&lt;p&gt;Consider a hypothetical deal at a B2B software company. The buyer sends a security questionnaire with 180 questions. Your team uses AI to find previous answers and prepare a draft. By the afternoon, most of the document is filled in.&lt;/p&gt;

&lt;p&gt;Two days later, sales is still waiting to send it.&lt;/p&gt;

&lt;p&gt;One answer describes a control that has changed. Another needs legal approval. A product question has been sitting in a shared channel because nobody knows who should respond.&lt;/p&gt;

&lt;p&gt;You step in, find the right people, and chase the remaining decisions. Eventually, the approved version reaches the buyer.&lt;/p&gt;

&lt;p&gt;The team saved time drafting. You still had to get the work finished.&lt;/p&gt;

&lt;p&gt;If you are deciding where to invest in AI next, that remaining effort deserves a closer look.&lt;/p&gt;

&lt;h2&gt;
  
  
  The work after the draft still has a cost
&lt;/h2&gt;

&lt;p&gt;Drafting is easy to demonstrate. Give a tool a document, watch it produce an answer, and compare that with the effort of writing from scratch.&lt;/p&gt;

&lt;p&gt;Following the document through the business is less tidy. Someone has to establish which evidence is current, resolve uncertainty, find an approver, and make sure the final version goes to the right person.&lt;/p&gt;

&lt;p&gt;If those steps caused the delay before AI arrived, a faster draft can leave the overall timeline largely unchanged.&lt;/p&gt;

&lt;p&gt;It can also create a review queue. More material reaches the same small group of people, who now have to check it alongside their existing responsibilities. The work saved by one team becomes additional work for another.&lt;/p&gt;

&lt;p&gt;Drafting assistance can still be valuable. But its local benefit tells you little about whether the company can handle more customer requests without adding coordination work.&lt;/p&gt;

&lt;p&gt;For a founder, that difference shows up in the calendar: the same follow-ups, the same escalation meetings, the same requests to unblock something that looked almost done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define completion before expanding the rollout
&lt;/h2&gt;

&lt;p&gt;For the questionnaire, an approved and delivered response is a useful finish line. A populated spreadsheet is an intermediate step.&lt;/p&gt;

&lt;p&gt;That is the distinction behind Coryntas's &lt;a href="https://coryntas.com/blog/enterprise-ai-finish-the-work" rel="noopener noreferrer"&gt;Enterprise AI Has to Finish the Work&lt;/a&gt;: the business process defines completion, including the decisions and handoffs required to reach it.&lt;/p&gt;

&lt;p&gt;In this example, current evidence must support the answers. Uncertain claims need review. An authorized person must approve what the company will tell the buyer. The team must retain the version it actually sent.&lt;/p&gt;

&lt;p&gt;Each requirement should have an owner and a visible status. A message saying “legal is looking at it” leaves too much unresolved. Which person? What decision? By when? What happens if the deadline passes?&lt;/p&gt;

&lt;p&gt;AI may help gather evidence, prepare answers, route questions, and track outstanding decisions. Those capabilities are useful when they advance an agreed process. An agent cannot settle an internal disagreement about who has authority simply by sending more reminders.&lt;/p&gt;

&lt;p&gt;Before buying another tool, inspect a few recent questionnaires. Identify where they waited and what finally moved them forward. That gives you a concrete requirement for the next investment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give reviewers a decision they can actually make
&lt;/h2&gt;

&lt;p&gt;Human review becomes expensive when the reviewer has to repeat the preparation.&lt;/p&gt;

&lt;p&gt;“Please check this document” asks someone to discover every uncertainty themselves. A more useful handoff identifies the proposed answer, its supporting evidence, what remains unresolved, and the decision required.&lt;/p&gt;

&lt;p&gt;The security owner can then assess a specific claim. Legal can review a specific commitment. Routine answers do not need to keep returning to the founder because one exceptional answer is blocked.&lt;/p&gt;

&lt;p&gt;This division still leaves consequential decisions with people. The improvement is in how much searching, reconstruction, and chasing surrounds those decisions.&lt;/p&gt;

&lt;p&gt;It also has costs. Connecting systems, keeping evidence current, and maintaining the workflow all require effort. An infrequent task may not justify extensive automation. Some cases will remain slow because the underlying question requires investigation.&lt;/p&gt;

&lt;p&gt;Those limits should be visible before the rollout expands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check whether the process still needs rescuing
&lt;/h2&gt;

&lt;p&gt;Compare the same kinds of cases before and after the change. Look at elapsed time from request to accepted delivery, the hours people spend reviewing and correcting, and how often a manager intervenes outside the planned approval process.&lt;/p&gt;

&lt;p&gt;Include integration, maintenance, and exception handling when calculating the cost per accepted result. Keep quality alongside speed: sending an unsupported claim sooner would be a poor outcome.&lt;/p&gt;

&lt;p&gt;Treat planned approval and unexpected intervention separately. A legal sign-off may be exactly how the workflow should operate. A founder repeatedly searching for the missing approver points to a problem worth fixing.&lt;/p&gt;

&lt;p&gt;For your next operating review, bring one delayed task from the previous week. Trace what happened after the first AI output. Record where it waited, who intervened, and what they had to do.&lt;/p&gt;

&lt;p&gt;Then choose one change and check whether comparable work gets through with less assistance.&lt;/p&gt;

&lt;p&gt;Which recurring task still lands on your desk to unblock, even after your team started using AI?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>leadership</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What MCP Doesn't Solve</title>
      <dc:creator>Vincent Tuan</dc:creator>
      <pubDate>Mon, 24 Aug 2026 07:42:00 +0000</pubDate>
      <link>https://dev.to/coryntas/what-mcp-doesnt-solve-1ahe</link>
      <guid>https://dev.to/coryntas/what-mcp-doesnt-solve-1ahe</guid>
      <description>&lt;p&gt;Consider an illustrative employee-offboarding workflow. The HR system records that access should end at 17:00. At 15:30, the employee’s manager sends a message: “Their last meeting is done. Offboard them now.”&lt;/p&gt;

&lt;p&gt;The agent finds the correct identity-management tool. Its arguments satisfy the input schema. The MCP server accepts its access token, and the target API is available.&lt;/p&gt;

&lt;p&gt;None of that establishes whether the manager can change the effective termination time.&lt;/p&gt;

&lt;p&gt;The connection may work exactly as designed while the resulting business action is premature, unauthorized, or blocked by information the tool call never examined.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP defines a useful tool boundary
&lt;/h2&gt;

&lt;p&gt;The MCP tools specification gives applications a consistent way to discover and invoke capabilities.&lt;/p&gt;

&lt;p&gt;A server publishes tool definitions containing names, descriptions, input schemas, and optional output schemas. A client discovers them through &lt;code&gt;tools/list&lt;/code&gt; and invokes one through &lt;code&gt;tools/call&lt;/code&gt;. The protocol also distinguishes malformed protocol requests from errors produced during tool execution.&lt;/p&gt;

&lt;p&gt;This boundary solves a real interoperability problem. An application does not need a custom discovery mechanism for every database, document system, or internal API it connects to. Tool definitions give the model enough information to choose a capability and construct an argument payload.&lt;/p&gt;

&lt;p&gt;The specification also assigns important security responsibilities. Servers must validate inputs, enforce access controls, rate-limit calls, and sanitize outputs. Clients should expose tool activity to users, validate results, apply timeouts, log usage, and request confirmation for sensitive operations.&lt;/p&gt;

&lt;p&gt;These controls can establish that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the requested tool exists;&lt;/li&gt;
&lt;li&gt;the arguments have an acceptable shape;&lt;/li&gt;
&lt;li&gt;the caller can reach the MCP server;&lt;/li&gt;
&lt;li&gt;the server accepted or rejected the invocation; and&lt;/li&gt;
&lt;li&gt;the result conforms to an expected structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The offboarding decision depends on additional facts. Which system controls the termination time? Can this manager modify it? Is there a legal hold? Has HR cancelled or delayed the event? Has another workflow already started the same task?&lt;/p&gt;

&lt;p&gt;An input schema can require employee_id, effective_at, and reason. It cannot determine which source has authority over effective_at unless the surrounding system supplies and enforces that rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transport authorization has a narrower job
&lt;/h2&gt;

&lt;p&gt;The MCP authorization specification defines authorization for HTTP-based transports. It describes how a client discovers an authorization server, obtains an access token, and presents that token to a protected MCP resource.&lt;/p&gt;

&lt;p&gt;That flow helps answer whether the client may make requests to the server with the granted scope. It does not contain the organization’s employment policy or decide whether this offboarding should happen at 15:30.&lt;/p&gt;

&lt;p&gt;Production workflows often involve at least four identities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The requester initiates the work. In this case, that may be the manager.&lt;/li&gt;
&lt;li&gt;The actor is the workload identity calling the identity-management system.&lt;/li&gt;
&lt;li&gt;The subject is the employee whose access will change.&lt;/li&gt;
&lt;li&gt;The approver supplies authority for a decision the requester or actor cannot make alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Collapsing these roles creates misleading audit records. If the agent uses the manager’s token, the target system may record that the manager disabled the account even though an automated workflow selected the action and payload. If the agent uses a service account, the log may identify the technical actor while omitting who requested the change and which HR decision authorized it.&lt;/p&gt;

&lt;p&gt;OAuth scopes can restrict what the actor is technically able to request. Workflow policy must still decide what this run may do to this subject at this time.&lt;/p&gt;

&lt;p&gt;The distinction becomes more important when an MCP server calls another service. The official security guidance warns against token passthrough because it weakens audience restrictions and attribution. A separate downstream credential protects that boundary, but it still does not establish the business reason for using the credential.&lt;/p&gt;

&lt;h2&gt;
  
  
  The runtime needs a decision it can inspect
&lt;/h2&gt;

&lt;p&gt;Before a consequential tool call, the runtime should be able to produce a compact record explaining why the action is currently permitted.&lt;/p&gt;

&lt;p&gt;The following execution envelope is illustrative. It is not part of the MCP specification or a proposed extension to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;OFF-2048&lt;/span&gt;
&lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scheduled_employee_offboarding&lt;/span&gt;

&lt;span class="na"&gt;requester&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;manager:1842&lt;/span&gt;
&lt;span class="na"&gt;actor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;workload:offboarding-agent-prod&lt;/span&gt;
&lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;employee:7721&lt;/span&gt;

&lt;span class="na"&gt;authoritative_event&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hris:termination:99108&lt;/span&gt;
&lt;span class="na"&gt;policy_version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;access-offboarding@2026-07-15&lt;/span&gt;

&lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;allow&lt;/span&gt;
&lt;span class="na"&gt;allowed_action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;identity.disable_sign_in&lt;/span&gt;
&lt;span class="na"&gt;execute_after&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-08-24T17:00:00+07:00&lt;/span&gt;

&lt;span class="na"&gt;approval_ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hr-approval:5519&lt;/span&gt;
&lt;span class="na"&gt;approval_payload_digest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sha256:84f2...&lt;/span&gt;

&lt;span class="na"&gt;idempotency_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;OFF-2048:disable-sign-in&lt;/span&gt;

&lt;span class="na"&gt;evidence_refs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;hris:employee:7721@version-44&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;idp:user:8fd2@observed-16:59:52&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each field closes a specific gap around the tool call.&lt;/p&gt;

&lt;p&gt;authoritative_event ties the action to an HR record rather than the latest message in chat. policy_version preserves the rule used to reach the decision. execute_after prevents a valid future action from becoming an authorized immediate action. The approval digest binds the reviewer’s decision to a particular payload. The idempotency key gives the target service a way to recognize a repeated request.&lt;/p&gt;

&lt;p&gt;Evidence references retain the records behind the decision without forcing every source document into the model context. They also give an operator something concrete to inspect when a run is challenged later.&lt;/p&gt;

&lt;p&gt;The MCP request can carry some of these values as tool arguments. Their presence alone does not make them trustworthy. The runtime still needs to obtain them from authoritative systems, evaluate the applicable policy, and prevent the model or requester from substituting unsupported values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approval can expire before execution
&lt;/h2&gt;

&lt;p&gt;Suppose HR approves the offboarding plan at 15:30 for execution at 17:00. At 16:45, the termination is delayed. At 16:50, legal places the employee’s documents on hold.&lt;/p&gt;

&lt;p&gt;The earlier approval accurately described an earlier state. Reusing it without another check would authorize an action whose conditions have changed.&lt;/p&gt;

&lt;p&gt;The runtime should revalidate the facts that materially affect the decision as close to execution as practical. For this workflow, that may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the current HR event and effective time;&lt;/li&gt;
&lt;li&gt;the employee’s employment status;&lt;/li&gt;
&lt;li&gt;active legal or security holds;&lt;/li&gt;
&lt;li&gt;the validity of the approval;&lt;/li&gt;
&lt;li&gt;the proposed action payload; and&lt;/li&gt;
&lt;li&gt;the observed state of the target account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not require a person to approve every directory read. Approval is more useful when it binds to the consequence: which account will change, when it will change, what related transfers will occur, and which exceptions remain unresolved.&lt;/p&gt;

&lt;p&gt;If a material input changes, the runtime should invalidate the approval or request a narrower review. A generic confirmation for &lt;code&gt;disable_user&lt;/code&gt; provides little evidence if the reviewer never saw the subject, effective time, source event, or dependent actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A timeout does not reveal whether the write happened
&lt;/h2&gt;

&lt;p&gt;At 17:00, the agent calls &lt;code&gt;disable_sign_in&lt;/code&gt;. The identity provider commits the change, but the response is lost before the MCP server receives it.&lt;/p&gt;

&lt;p&gt;From the caller’s perspective, the request timed out. That observation does not prove failure.&lt;/p&gt;

&lt;p&gt;Immediately retrying may be harmless if the operation is idempotent. The same approach can cause duplicate document transfers, repeated notifications, or multiple service-desk records when applied to other offboarding steps.&lt;/p&gt;

&lt;p&gt;The tool boundary therefore needs more than a generic retry counter. A write-capable integration should expose enough execution information for the runtime to decide whether to retry, inspect, reconcile, or stop. Useful capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a caller-supplied idempotency key;&lt;/li&gt;
&lt;li&gt;a stable downstream operation identifier;&lt;/li&gt;
&lt;li&gt;a status lookup independent of the original request;&lt;/li&gt;
&lt;li&gt;a result that distinguishes rejected, committed, and unknown states; and&lt;/li&gt;
&lt;li&gt;documented retry and compensation behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP can transport these arguments and results. It cannot make HR, identity, storage, and ticketing systems participate in one atomic transaction.&lt;/p&gt;

&lt;p&gt;The workflow must retain which actions were planned, approved, attempted, and observed as committed. Restarting the conversation is not a recovery strategy. A resumed run needs durable state that prevents completed writes from being replayed and directs uncertain writes into reconciliation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Responsibility remains distributed
&lt;/h2&gt;

&lt;p&gt;The MCP architecture gives the host responsibility for areas such as connection permissions, consent, and context aggregation. Servers expose focused capabilities, while clients maintain their connections to those servers.&lt;/p&gt;

&lt;p&gt;A production workflow adds responsibilities across those components.&lt;/p&gt;

&lt;p&gt;The host determines which servers and tools enter the model’s action surface. The workflow runtime retains task state, evaluates policy, binds approvals, and handles recovery. The MCP server validates requests and translates downstream failure details. The target system remains authoritative for whether its own records changed.&lt;/p&gt;

&lt;p&gt;Logs from each component need shared identifiers. Otherwise, every system may contain an audit trail while no operator can reconstruct the complete action.&lt;/p&gt;

&lt;p&gt;This machinery has a cost. Revalidation adds latency. Evidence retention introduces access-control and privacy obligations. Narrow tool exposure reduces flexibility. Reconciliation requires background processing and an owner for cases automation cannot resolve.&lt;/p&gt;

&lt;p&gt;A read-only assistant that searches public documentation may not need the same controls as an agent that disables accounts. The required boundary should follow the consequence of the action and the difficulty of recovering from an incorrect result.&lt;/p&gt;

&lt;p&gt;MCP makes tool integration more consistent. Production operation still depends on explicit authority, current evidence, durable workflow state, and known failure semantics around each call.&lt;/p&gt;

&lt;p&gt;When one of your MCP writes times out, what record tells the runtime whether it should retry, reconcile, or stop?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was adapted for the DEV community from &lt;a href="https://coryntas.com/blog/mcp-connects-tools-does-not-govern-work" rel="noopener noreferrer"&gt;MCP Connects Tools. It Does Not Govern the Work.&lt;/a&gt;, originally published by Coryntas.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>security</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Long-Running AI Agents Accumulate Context Debt</title>
      <dc:creator>Vincent Tuan</dc:creator>
      <pubDate>Mon, 03 Aug 2026 07:46:55 +0000</pubDate>
      <link>https://dev.to/coryntas/long-running-ai-agents-accumulate-context-debt-3n01</link>
      <guid>https://dev.to/coryntas/long-running-ai-agents-accumulate-context-debt-3n01</guid>
      <description>&lt;p&gt;An illustrative reporting agent prepares a monthly operating review. It queries finance, CRM, support, and the data warehouse; compares this month with prior periods; investigates material changes; drafts explanations; collects owner comments; and revises the report over several days.&lt;/p&gt;

&lt;p&gt;By the third revision, its context contains raw query results, discarded hypotheses, repeated instructions, old owner comments, and the current draft. The most important correction—a finance owner rejecting the original revenue explanation—now competes with everything that came before it.&lt;/p&gt;

&lt;p&gt;The agent has not run out of intelligence. It has accumulated &lt;strong&gt;context debt&lt;/strong&gt;: temporary execution material has become permanent reasoning input.&lt;/p&gt;

&lt;h2&gt;
  
  
  The context window is a working surface, not the system of record
&lt;/h2&gt;

&lt;p&gt;Keeping every intermediate result in the model context feels safe because nothing is lost. In practice, relevance declines as a run grows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;large tool responses consume tokens;&lt;/li&gt;
&lt;li&gt;old instructions conflict with newer decisions;&lt;/li&gt;
&lt;li&gt;repeated summaries introduce small distortions;&lt;/li&gt;
&lt;li&gt;rejected hypotheses remain close to accepted findings; and&lt;/li&gt;
&lt;li&gt;the current deliverable becomes harder to distinguish from earlier drafts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A larger context window delays this problem. It does not define which state is authoritative, which evidence is recoverable, or which decisions should survive a restart.&lt;/p&gt;

&lt;p&gt;A long-running workflow needs at least four storage roles.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Working context
&lt;/h3&gt;

&lt;p&gt;The current objective, immediate constraints, selected evidence, and next executable step belong here. This set should be small enough that every item can affect the next decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Durable task state
&lt;/h3&gt;

&lt;p&gt;Completed checkpoints, owners, approvals, deadlines, open exceptions, and permitted next actions should live outside the prompt. This state must survive model calls, worker restarts, and handoffs.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Evidence storage
&lt;/h3&gt;

&lt;p&gt;Raw source results should be retained with stable identifiers, timestamps, and access controls. The agent can reload them when a later step needs inspection without injecting every record into every prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Deliverable state
&lt;/h3&gt;

&lt;p&gt;The current report, plan, ticket, or other business artifact needs its own version history. Reviewer changes should update this artifact without turning the entire conversation transcript into the only record of what changed.&lt;/p&gt;

&lt;p&gt;Moving material out of the prompt is not deletion. It is putting information where the runtime can retrieve it deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compaction should preserve decisions, not merely shorten text
&lt;/h2&gt;

&lt;p&gt;A generic conversation summary may retain the topic while losing the operational fact that matters: who rejected an explanation, which source replaced it, and whether the correction applies to one metric or the entire report.&lt;/p&gt;

&lt;p&gt;A useful checkpoint is structured. For example:&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;"task_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"monthly-review-2026-07"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"objective"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Produce an approved operating review"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"checkpoint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"finance-variance-reviewed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"accepted_findings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"metric"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"net_revenue_retention"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"explanation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Two enterprise downgrades"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"evidence_refs"&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="s2"&gt;"warehouse:q_184"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crm:acct_72"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rejected_findings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"explanation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FX movement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rejected_by"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"finance-owner"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"decided_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-03T09:20:00Z"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"open_questions"&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="s2"&gt;"Confirm support-cost allocation"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"allowed_next_actions"&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="s2"&gt;"analyze_support_costs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"request_owner_review"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact schema will vary. The important part is separating decisions from the tokens that produced them.&lt;/p&gt;

&lt;p&gt;Each checkpoint should answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What remains in model context?&lt;/li&gt;
&lt;li&gt;What moves to durable state?&lt;/li&gt;
&lt;li&gt;Which raw evidence can be recovered later?&lt;/li&gt;
&lt;li&gt;Which actions are valid from this state?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compaction, subtask isolation, and progressively loaded instructions are mechanisms for enforcing those choices. They are not substitutes for a state model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subtasks need isolation and a shared contract
&lt;/h2&gt;

&lt;p&gt;The reporting workflow can separate finance variance analysis, sales pipeline changes, and support-volume analysis. Each subtask receives only the systems, definitions, and period relevant to its work.&lt;/p&gt;

&lt;p&gt;Isolation reduces interference, but it creates an integration problem. The coordinating agent cannot safely reconcile three polished narratives that use different definitions.&lt;/p&gt;

&lt;p&gt;A shared result contract might require every subtask to return:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;metric identifier and reporting period;&lt;/li&gt;
&lt;li&gt;current and comparison values;&lt;/li&gt;
&lt;li&gt;explanation and confidence;&lt;/li&gt;
&lt;li&gt;authoritative source references;&lt;/li&gt;
&lt;li&gt;unresolved issues; and&lt;/li&gt;
&lt;li&gt;requested decisions or approvals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This contract does more than improve formatting. It gives the coordinator a stable boundary for validation, comparison, and retry.&lt;/p&gt;

&lt;p&gt;If one subtask fails, the runtime can rerun that unit without replaying the entire workflow. If a reviewer corrects a metric definition, the system can invalidate only the findings that depend on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resuming is a first-class operation
&lt;/h2&gt;

&lt;p&gt;A long-running agent should be tested from checkpoints, not only from the beginning.&lt;/p&gt;

&lt;p&gt;At resume time, the runtime should be able to reconstruct:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the current objective and accepted deliverable version;&lt;/li&gt;
&lt;li&gt;completed and pending steps;&lt;/li&gt;
&lt;li&gt;active owners and deadlines;&lt;/li&gt;
&lt;li&gt;the latest authoritative decisions;&lt;/li&gt;
&lt;li&gt;evidence references needed for the next step; and&lt;/li&gt;
&lt;li&gt;the permissions that are still valid.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This last item matters because authority can change while a workflow is paused. A task approved yesterday may require a new check before an agent performs the action today.&lt;/p&gt;

&lt;p&gt;A resume test is therefore more than loading a saved prompt. It verifies that the workflow can rebuild the minimum trustworthy working set from durable state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context debt has an operating cost
&lt;/h2&gt;

&lt;p&gt;External state introduces storage, retention, and access-control decisions. Compaction can omit a detail that later becomes important. Subtask isolation increases orchestration complexity. Reloading evidence can add latency.&lt;/p&gt;

&lt;p&gt;Those are measurable tradeoffs. Useful signals include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;context size by workflow stage;&lt;/li&gt;
&lt;li&gt;repeated retrieval of the same evidence;&lt;/li&gt;
&lt;li&gt;compaction corrections by reviewers;&lt;/li&gt;
&lt;li&gt;checkpoint resume failures;&lt;/li&gt;
&lt;li&gt;stale decisions used after a restart;&lt;/li&gt;
&lt;li&gt;evidence reload latency; and&lt;/li&gt;
&lt;li&gt;cost per accepted deliverable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some work should pause instead of compacting. If reviewers fundamentally change the objective, starting a new version with an explicit handoff may be safer than asking the agent to reinterpret a long and contradictory history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finish with a record another run can trust
&lt;/h2&gt;

&lt;p&gt;The completed report should retain its reporting period, metric definitions, reviewer decisions, evidence references, and unresolved caveats. Next month's agent can use the accepted artifact as a comparison without inheriting all of the execution debris that created it.&lt;/p&gt;

&lt;p&gt;Context debt appears when a system confuses memory with accumulation. Long-running agents need a maintained working set and a durable operating record—not an endlessly growing prompt.&lt;/p&gt;

&lt;p&gt;How are you separating working context from durable task state in your long-running agents?&lt;/p&gt;




&lt;p&gt;This article was adapted for the DEV community from &lt;a href="https://coryntas.com/blog/long-running-agents-context-debt" rel="noopener noreferrer"&gt;Long-Running Agents Accumulate Context Debt&lt;/a&gt;, originally published by &lt;a href="https://coryntas.com/" rel="noopener noreferrer"&gt;Coryntas&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>More Tools Can Make Your AI Agent Slower</title>
      <dc:creator>Vincent Tuan</dc:creator>
      <pubDate>Sat, 01 Aug 2026 13:15:48 +0000</pubDate>
      <link>https://dev.to/coryntas/more-tools-can-make-your-ai-agent-slower-7id</link>
      <guid>https://dev.to/coryntas/more-tools-can-make-your-ai-agent-slower-7id</guid>
      <description>&lt;p&gt;A renewal agent can call the CRM, email, calendar, support, document search, and contract systems. On its first run, it asks every system for everything related to one customer.&lt;/p&gt;

&lt;p&gt;The result looks thorough: hundreds of CRM fields, years of ticket history, complete email threads, and the same contract attached to several messages. But the agent now has to spend time and tokens deciding which records matter before it can make progress on the renewal.&lt;/p&gt;

&lt;p&gt;The agent is well connected. It is also slower, more expensive, and less certain.&lt;/p&gt;

&lt;p&gt;Adding a tool expands what an agent can reach. It does not guarantee that the agent can select the right capability, retrieve a bounded result, or preserve enough of its execution budget to finish the task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool schemas consume attention before the first call
&lt;/h2&gt;

&lt;p&gt;An LLM needs the name, description, and input schema of each available tool before it can choose one. When several tools expose similar actions, selection becomes a routing problem.&lt;/p&gt;

&lt;p&gt;Consider a broad interface like this:&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;"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;"manage_account"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Search, update, assign, add a note, change a stage, or create a task for an account"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&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;"account_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"operation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"assignee"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"stage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"note"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"due_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It appears flexible, but every call asks the model to infer which combination of optional parameters represents the intended action. Validation and permissions must then account for every mode hidden behind the same interface.&lt;/p&gt;

&lt;p&gt;A task-shaped read is less ambitious:&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;"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_renewal_record"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Return the approved renewal view for one customer, including source timestamps"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&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;"customer_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The narrower tool is easier to select, permission, test, and recover. It may require additional orchestration steps, and it will not cover every future account workflow. That is a real tradeoff. The benefit is that each supported step carries less ambiguity.&lt;/p&gt;

&lt;p&gt;Tool count therefore has two costs before execution begins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every schema occupies context;&lt;/li&gt;
&lt;li&gt;overlapping descriptions increase routing uncertainty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither cost appears in a dashboard that reports only the number of connected systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connectivity does not control the response shape
&lt;/h2&gt;

&lt;p&gt;Suppose the CRM API returns 180 fields for an account. The renewal decision needs eight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;renewal date;&lt;/li&gt;
&lt;li&gt;contract value;&lt;/li&gt;
&lt;li&gt;account owner;&lt;/li&gt;
&lt;li&gt;current stage;&lt;/li&gt;
&lt;li&gt;product set;&lt;/li&gt;
&lt;li&gt;open commercial risks;&lt;/li&gt;
&lt;li&gt;last verified customer contact; and&lt;/li&gt;
&lt;li&gt;source timestamps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passing all 180 fields to the model moves a data-selection problem into the most expensive part of the workflow. The same failure appears when an email connector returns complete message bodies instead of headers and short extracts, or when a document connector sends the same attachment once for every message that references it.&lt;/p&gt;

&lt;p&gt;Each unnecessary value consumes something. It uses tokens when placed in model context, storage and transfer when retained outside it, and reasoning attention when the agent has to filter it.&lt;/p&gt;

&lt;p&gt;The connector should return a task-shaped view:&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;"customer_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cus_1842"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"renewal_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-09-30"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contract_value"&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;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&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;"account_owner_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"usr_291"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"open_risk_ids"&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="s2"&gt;"risk_17"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-29T08:42:10Z"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Raw records can remain available for inspection without being injected into every prompt. The agent can retrieve full email bodies or documents only after a bounded search identifies the relevant records.&lt;/p&gt;

&lt;p&gt;Prompting the model to “focus on what matters” does not repair an oversized payload. By that point, the system has already paid to retrieve and expose the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP standardizes exchange, not business meaning
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol gives compatible systems a common way to expose tools and context. That interface boundary is useful, but it cannot decide what a renewal agent needs from a CRM or which source should win when records disagree.&lt;/p&gt;

&lt;p&gt;An MCP server can expose a technically valid tool that still returns the wrong slice of the system. It does not automatically answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this the current policy or an archived version?&lt;/li&gt;
&lt;li&gt;Does the response include all pages?&lt;/li&gt;
&lt;li&gt;Can this write be retried safely?&lt;/li&gt;
&lt;li&gt;Do two records represent the same customer?&lt;/li&gt;
&lt;li&gt;Is the caller allowed to see the underlying support incident?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Protocol compatibility and context quality are different properties. Standardizing the call does not remove the need to design the tool contract around the business task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pagination can make an incomplete result look complete
&lt;/h2&gt;

&lt;p&gt;The agent asks for all open support tickets. The API returns 50 records and a continuation token.&lt;/p&gt;

&lt;p&gt;If the tool output does not expose that token clearly—or its contract does not say when pagination is required—the first page can look like the complete result. The agent may produce a confident renewal summary while missing the ticket that explains the account risk.&lt;/p&gt;

&lt;p&gt;“Fetch every page” is not always the right correction. An account with years of activity may have thousands of records. The workflow needs a completeness condition, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retrieve all open tickets;&lt;/li&gt;
&lt;li&gt;stop after the relevant date boundary;&lt;/li&gt;
&lt;li&gt;continue until a known record is found; or&lt;/li&gt;
&lt;li&gt;escalate when the result exceeds the reviewable limit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The condition belongs in the workflow and tool contract. Otherwise, the model has to invent one at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Retries are part of the tool interface
&lt;/h2&gt;

&lt;p&gt;Reads and writes fail differently.&lt;/p&gt;

&lt;p&gt;If a CRM read times out, another attempt may be harmless. If a request to create a follow-up task times out after the server commits it, retrying can create a duplicate. Refusing to retry leaves the agent uncertain about whether the action happened.&lt;/p&gt;

&lt;p&gt;A production write tool needs explicit answers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Did the request fail before or after execution?&lt;/li&gt;
&lt;li&gt;Does the operation accept an idempotency key?&lt;/li&gt;
&lt;li&gt;Can the agent look up the committed action?&lt;/li&gt;
&lt;li&gt;What evidence identifies a successful write?&lt;/li&gt;
&lt;li&gt;Which errors require a person rather than another attempt?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These details rarely matter in a short demo. They matter as soon as an agent changes business state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure accepted outcomes, not available tools
&lt;/h2&gt;

&lt;p&gt;A useful evaluation starts with one outcome—for example, prepare a renewal brief with current commercial terms, unresolved support risks, source references, and an escalation when required evidence is missing.&lt;/p&gt;

&lt;p&gt;Then measure the system that produces it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;latency per accepted brief;&lt;/li&gt;
&lt;li&gt;tokens and tool calls per accepted brief;&lt;/li&gt;
&lt;li&gt;incomplete or duplicated records;&lt;/li&gt;
&lt;li&gt;unsafe or unnecessary retries;&lt;/li&gt;
&lt;li&gt;reviewer corrections; and&lt;/li&gt;
&lt;li&gt;cases escalated because a capability was intentionally unsupported.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removing a broad tool may leave an edge case unavailable until the team designs a safer capability. A bounded agent that identifies that limit is often more dependable than one that guesses its way through a large tool catalog.&lt;/p&gt;

&lt;p&gt;The practical question is not “How many systems can the agent call?” It is “Does each connection return the right information or perform the right action under conditions we can test?”&lt;/p&gt;

&lt;p&gt;That is the distinction between an agent that looks capable in a tool list and one that can finish a workflow without losing control of cost, latency, or business state.&lt;/p&gt;




&lt;p&gt;This article was adapted for the DEV community from &lt;a href="https://coryntas.com/blog/more-tools-can-make-agents-slower" rel="noopener noreferrer"&gt;More Tools Can Make an Agent Slower&lt;/a&gt;, originally published by Coryntas.&lt;/p&gt;

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