<?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: Ou1comes</title>
    <description>The latest articles on DEV Community by Ou1comes (@ou1comes).</description>
    <link>https://dev.to/ou1comes</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%2F4213152%2F72087ec5-5481-4f26-a512-2c953cac8d60.png</url>
      <title>DEV Community: Ou1comes</title>
      <link>https://dev.to/ou1comes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ou1comes"/>
    <language>en</language>
    <item>
      <title>Before You Connect an MCP Server: A Dependency Review for Agent Builders</title>
      <dc:creator>Ou1comes</dc:creator>
      <pubDate>Mon, 02 Nov 2026 14:08:01 +0000</pubDate>
      <link>https://dev.to/ou1comes/before-you-connect-an-mcp-server-a-dependency-review-for-agent-builders-dl7</link>
      <guid>https://dev.to/ou1comes/before-you-connect-an-mcp-server-a-dependency-review-for-agent-builders-dl7</guid>
      <description>&lt;p&gt;Adding an MCP server to an agent takes a few lines of configuration. That convenience hides a real decision: you are giving software you did not write a path into your agent's actions and, often, into your users' data.&lt;/p&gt;

&lt;p&gt;We treat every MCP server as a dependency and review it before it reaches production. Here is the review, grounded in what the Model Context Protocol specification actually says.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with what the spec says about tools
&lt;/h2&gt;

&lt;p&gt;The specification does not soften this point: tools represent arbitrary code execution and must be treated with appropriate caution.&lt;/p&gt;

&lt;p&gt;Servers can also attach annotations that describe how a tool behaves. On those, the spec is just as clear: clients must consider tool annotations to be untrusted unless they come from trusted servers. So a tool that describes itself as harmless is making a claim, not proving anything. Decide how far you trust the server before you trust its descriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review 1: who maintains it, and what can it reach?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maintainer and releases.&lt;/strong&gt; Who publishes the server, how are releases made, and can you pin an exact version?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reach.&lt;/strong&gt; List every system the server can touch with the credentials you hand it. If it only needs to read, do not give it write access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data.&lt;/strong&gt; Write down which user data could flow through it. That list is what you are really approving.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Review 2: authorization and tokens
&lt;/h2&gt;

&lt;p&gt;Authorization is optional for MCP implementations. In practice, "it speaks MCP" tells you nothing about whether it checks who is calling.&lt;/p&gt;

&lt;p&gt;The spec also scopes where its authorization rules apply: implementations using an HTTP-based transport should conform to the authorization specification, while implementations using an STDIO transport should not follow it and take credentials from their environment instead. For a local STDIO server, that makes your environment variables part of the review.&lt;/p&gt;

&lt;p&gt;For HTTP servers, two token rules are worth checking explicitly. Clients must not send tokens to the MCP server other than ones issued by the MCP server's authorization server, and MCP servers must not accept or transit any other tokens. If an HTTP server expects your client to send it a token meant for some other service so that it can pass that token along, treat that as a finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review 3: the obligations on both sides
&lt;/h2&gt;

&lt;p&gt;The specification lists what servers must do: validate all tool inputs, implement proper access controls, rate limit tool invocations and sanitize tool outputs. Ask the maintainer how each one is handled. "We trust the model" is not an answer to any of them.&lt;/p&gt;

&lt;p&gt;It also lists what clients should do: prompt for user confirmation on sensitive operations, show tool inputs to the user before calling the server, validate tool results before passing them to the LLM, implement timeouts for tool calls and log tool usage for audit purposes. If your agent framework does not do these, that gap belongs in the review too.&lt;/p&gt;

&lt;p&gt;Above all of it sits one principle: there should always be a human in the loop with the ability to deny tool invocations.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist to paste into the pull request
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Maintainer identified; exact version pinned&lt;/li&gt;
&lt;li&gt;[ ] Every reachable system listed, with the narrowest credentials that work&lt;/li&gt;
&lt;li&gt;[ ] User data that can pass through the server written down&lt;/li&gt;
&lt;li&gt;[ ] Authorization: HTTP server conforms to the spec, or STDIO credentials reviewed&lt;/li&gt;
&lt;li&gt;[ ] No pass-through of downstream tokens&lt;/li&gt;
&lt;li&gt;[ ] Tool annotations treated as untrusted unless the server is trusted&lt;/li&gt;
&lt;li&gt;[ ] Server obligations confirmed: input validation, access control, rate limits, output sanitization&lt;/li&gt;
&lt;li&gt;[ ] Client side: confirmation prompts, visible tool inputs, result validation, timeouts, audit logging&lt;/li&gt;
&lt;li&gt;[ ] A person can deny any tool call&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why we care
&lt;/h2&gt;

&lt;p&gt;This review is the thinking behind the MCP dependency reviews we are building at OU1COMES. AIVE, the autopilot being developed behind OU1COMES, is designed to coordinate agents and tools within defined policies, and deciding which tools it may use starts with a review like this one. More at &lt;a href="https://www.outcomes.services" rel="noopener noreferrer"&gt;OU1COMES&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sources: Model Context Protocol specification, version 2026-07-28: &lt;a href="https://modelcontextprotocol.io/specification/2026-07-28/index" rel="noopener noreferrer"&gt;overview&lt;/a&gt;, &lt;a href="https://modelcontextprotocol.io/specification/2026-07-28/server/tools" rel="noopener noreferrer"&gt;tools&lt;/a&gt; and &lt;a href="https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/index" rel="noopener noreferrer"&gt;authorization&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Created with AIVE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article was drafted with AI assistance in AIVE, the publishing autopilot being developed behind OU1COMES, and reviewed by the OU1COMES editorial team.&lt;/p&gt;

&lt;p&gt;AIVE powers the intelligence. OU1COMES delivers the outcomes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building OU1COMES: AI-Native Services With a Definition of Done</title>
      <dc:creator>Ou1comes</dc:creator>
      <pubDate>Wed, 28 Oct 2026 22:05:48 +0000</pubDate>
      <link>https://dev.to/ou1comes/building-ou1comes-ai-native-services-with-a-definition-of-done-gk9</link>
      <guid>https://dev.to/ou1comes/building-ou1comes-ai-native-services-with-a-definition-of-done-gk9</guid>
      <description>&lt;p&gt;OU1COMES is being built around a straightforward idea: an AI-native service should be judged by the completed work it delivers and the evidence that the work meets its requirements.&lt;/p&gt;

&lt;p&gt;For developers, this starts with a definition of done. Before choosing a model or designing an agent, specify the deliverable, the constraints, and the checks that determine whether the task is complete.&lt;/p&gt;

&lt;p&gt;Consider a document-preparation service. Producing fluent text is only one step. The workflow also needs to check required sections, distinguish supported claims from assumptions, and produce a usable artifact. If a required check fails, the result should remain incomplete.&lt;/p&gt;

&lt;p&gt;Our approach connects three responsibilities: define the work clearly, use AI within a bounded workflow, and verify the output against the original requirements. Human review belongs at the points where judgment, permission, or an external commitment is required.&lt;/p&gt;

&lt;p&gt;That distinction matters when a workflow can send a message, publish an article, or change a system. A prepared result is not permission to release it. And when an external action has an uncertain outcome, repeating it can create a duplicate rather than solve the problem.&lt;/p&gt;

&lt;p&gt;This is the direction we are taking with OU1COMES: useful services that make completion visible and give people a clear basis for accepting the work. It is a design commitment, not a claim that every task can be automated or independently verified.&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://www.outcomes.services" rel="noopener noreferrer"&gt;OU1COMES&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;AI disclosure: This article was drafted with AI assistance.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
