<?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: Kin Lane</title>
    <description>The latest articles on DEV Community by Kin Lane (@kinlane).</description>
    <link>https://dev.to/kinlane</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F520245%2F784ec874-c366-4588-b736-9eac98dbe9f0.jpg</url>
      <title>DEV Community: Kin Lane</title>
      <link>https://dev.to/kinlane</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kinlane"/>
    <language>en</language>
    <item>
      <title>What 253 Enterprises Are Actually Investing In (Hint: It's Not Just AI)</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Fri, 24 Apr 2026 13:19:20 +0000</pubDate>
      <link>https://dev.to/kinlane/what-253-enterprises-are-actually-investing-in-hint-its-not-just-ai-5cio</link>
      <guid>https://dev.to/kinlane/what-253-enterprises-are-actually-investing-in-hint-its-not-just-ai-5cio</guid>
      <description>&lt;p&gt;If you read the trade press, every enterprise on earth is doing exactly one thing right now: AI. Every keynote, every analyst note, every LinkedIn post says the same thing. AI-first. Agent-native. Foundation-model-powered.&lt;/p&gt;

&lt;p&gt;So we went and looked at what enterprises are actually spending money on. Not what their CMOs are saying. What their engineering orgs are hiring for, contributing to, and buying. And the answer is more interesting than the hype cycle gives it credit for.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we measured
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://signals.naftiko.io" rel="noopener noreferrer"&gt;Naftiko Signals&lt;/a&gt; profiles 253 enterprise companies by reading the engineering signals that cost real money: job postings, open source contributions, SaaS portfolios, standards participation, and tooling choices. Marketing is cheap. Headcount is not. A company that has been hiring for a capability for eighteen months is telling you something a press release cannot.&lt;/p&gt;

&lt;p&gt;We bucket those signals into 44 areas of technology spanning the full stack — AI, cloud, data, APIs, integrations, security, governance, observability, platform engineering, and the rest. Then we count: out of 253 enterprises, how many show meaningful investment in each area?&lt;/p&gt;

&lt;p&gt;Here is what came back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The top of the list
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Companies&lt;/th&gt;
&lt;th&gt;%&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Artificial Intelligence&lt;/td&gt;
&lt;td&gt;253&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Active Directory&lt;/td&gt;
&lt;td&gt;253&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Electronic Data Interchange&lt;/td&gt;
&lt;td&gt;252&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Deep Learning&lt;/td&gt;
&lt;td&gt;252&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;252&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Machine Learning&lt;/td&gt;
&lt;td&gt;251&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Operations&lt;/td&gt;
&lt;td&gt;249&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that list again. AI is tied for first — with Active Directory. And one rank below both of them, holding 86% of the enterprise market, is EDI. The protocol your grandfather used to send purchase orders.&lt;/p&gt;

&lt;p&gt;This is the story the hype cycle refuses to tell.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually means
&lt;/h2&gt;

&lt;p&gt;Three things jump out of this data, and none of them are the thing the analysts are selling.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;AI is real, but it is not alone at the top. Yes, 86% of enterprises are investing in AI, ML, and Deep Learning. That part of the narrative is true. What is missing from the narrative is that the same enterprises are investing — at the exact same intensity — in identity infrastructure, B2B document exchange, and operational tooling. The boring stuff did not go away. It got more important, because every AI initiative eventually has to authenticate against Active Directory and exchange data with a partner over EDI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The unglamorous layers are load-bearing. Active Directory at #2 and EDI at #3 are not legacy footnotes. They are the substrate every shiny initiative runs on top of. When 86% of large enterprises are still actively investing in EDI in 2026, that is not technical debt — it is the operating reality of how business actually moves between organizations. Anyone selling an "agent-to-agent commerce" vision that does not have an EDI story is selling a slide deck.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Data" is the silent winner. "Data" as a category sits at 86%, alongside Deep Learning and Machine Learning. Enterprises figured out a long time ago that AI without data infrastructure is a demo, not a system. The investment in pipelines, governance, and storage matches the investment in models — because it has to.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What the hype cycle gets wrong
&lt;/h2&gt;

&lt;p&gt;The dominant story of 2026 is that AI is reshaping everything and the rest of the stack is along for the ride. The signals say something more honest: AI is being layered on top of a stack that enterprises are still actively maintaining and growing. The directory service is not going away. The EDI gateway is not going away. The operational tooling is not going away. They are getting more investment, not less, because the AI layer increases the demands on all of them.&lt;/p&gt;

&lt;p&gt;If you are building for enterprises, this matters. A product that assumes the legacy substrate is dissolving will lose to a product that assumes it is thickening. Because the data says it is thickening.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is visible at all
&lt;/h2&gt;

&lt;p&gt;The reason any of this is visible is that we stopped relying on what enterprises say and started reading what they do. Job postings are a leading indicator of investment. OSS contributions are a leading indicator of internal capability. SaaS portfolios are a leading indicator of architectural strategy. Standards participation is a leading indicator of interoperability commitment. None of these are secret. They are just unaggregated.&lt;/p&gt;

&lt;p&gt;Signals aggregates them. Every company we profile is an open YAML file in a Git repository. Every signal definition is open. Every ranking is reproducible. If you disagree with how we classified a company, you can submit a PR.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with this
&lt;/h2&gt;

&lt;p&gt;If you are an operator inside an enterprise: use this list as a reality check on your own roadmap. If your AI strategy assumes EDI and AD are someone else's problem, the other 86% of enterprises disagree with you.&lt;/p&gt;

&lt;p&gt;If you are building software for enterprises: the boring categories at the top of this list are where the buyers are. The fastest path to relevance is connecting the new layer (AI, agents, MCP) to the substrate (identity, EDI, data, ops) — not pretending the substrate is gone.&lt;/p&gt;

&lt;p&gt;If you are trying to make sense of the market: stop reading press releases. Read the signals. They are open.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Platform: &lt;a href="https://signals.naftiko.io" rel="noopener noreferrer"&gt;signals.naftiko.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Browse the areas of technology view to see the full ranking across all 44 signal groups&lt;/li&gt;
&lt;li&gt;Browse the radar to see how each area sits across Adopting, Optimizing, Evaluating, and Watching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hype cycle tells you what enterprises want you to think they are doing. The signals tell you what they are actually paying people to build. Those are not the same list — and the gap between them is where the real opportunities live.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>enterprise</category>
      <category>api</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Stop Writing Integration Code. Write a Spec Instead.</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Tue, 21 Apr 2026 19:03:35 +0000</pubDate>
      <link>https://dev.to/kinlane/stop-writing-integration-code-write-a-spec-instead-n0d</link>
      <guid>https://dev.to/kinlane/stop-writing-integration-code-write-a-spec-instead-n0d</guid>
      <description>&lt;p&gt;Most enterprise integration work follows a familiar pattern. A team needs to connect system A to system B. A developer writes a client, adds authentication, shapes the response, exposes it somewhere. It works. It ships. Within a sprint it starts drifting from whatever documentation existed. Within a quarter, three other teams have written their own version of the same integration with different assumptions.&lt;/p&gt;

&lt;p&gt;This is not a tooling failure. It is a methodology failure. The integration intent — what to consume, how to shape it, what to expose — was never captured in a durable, inspectable artifact. It went straight into code and started drifting immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spec-Driven Integration
&lt;/h2&gt;

&lt;p&gt;Let me talk for a little bit about Spec-Driven Integration (SDI), and why it provides a new way to look at how we integrate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/naftiko/framework/wiki/Spec%E2%80%90Driven-Integration" rel="noopener noreferrer"&gt;Spec-Driven Integration&lt;/a&gt; (SDI) is a methodology that treats the specification as the primary integration artifact. Not documentation. Not generated code. The executable definition itself.&lt;/p&gt;

&lt;p&gt;A capability specification declares:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What upstream APIs are consumed (base URIs, authentication, resources, operations)&lt;/li&gt;
&lt;li&gt;How data is shaped (input parameters, output extraction via JSONPath)&lt;/li&gt;
&lt;li&gt;What is exposed downstream (REST endpoints, MCP tools, Agent Skills)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The specification is complete enough to execute directly. An engine reads it at runtime, handles HTTP consumption, data transformation, format conversion, and protocol exposure. No code generation. No compilation.&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;naftiko&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0-alpha1"&lt;/span&gt;

&lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;consumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;payments&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.internal.company/v2&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bearer&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{PAYMENTS_TOKEN}}"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;transactions&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/transactions&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;list-transactions&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GET&lt;/span&gt;
              &lt;span class="na"&gt;outputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;transactions&lt;/span&gt;
                  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;array&lt;/span&gt;
                  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$.data&lt;/span&gt;

  &lt;span class="na"&gt;exposes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mcp&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3001&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;payments-tools&lt;/span&gt;
      &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;list-recent-transactions&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;recent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;payment&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;transactions"&lt;/span&gt;
          &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;payments.list-transactions&lt;/span&gt;
          &lt;span class="na"&gt;outputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;array&lt;/span&gt;
              &lt;span class="na"&gt;mapping&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$.data"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That YAML is the integration. Run it in a container. The MCP tool is live on port 3001.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Code Generation Creates Drift
&lt;/h2&gt;

&lt;p&gt;The common objection is: "We already generate code from our OpenAPI specs." Code generation moves the specification one step away from execution. The generated code becomes the artifact that runs, not the spec. The moment someone modifies the generated code — to add a retry, to shape a response, to handle an edge case — the spec and the implementation diverge. Drift is reintroduced.&lt;/p&gt;

&lt;p&gt;I am looking for SDI to avoid this entirely. The spec IS what executes. There is no intermediate code artifact that can diverge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The SDI Workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Specify&lt;/strong&gt; — Write a YAML capability spec capturing the integration intent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate&lt;/strong&gt; — Lint and analyze for completeness before execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute&lt;/strong&gt; — Run the engine. No build step. No code generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refine&lt;/strong&gt; — Evolve the spec based on production feedback&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This cycle keeps the spec primary. What is deployed always matches documented intent because they are the same artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for AI
&lt;/h2&gt;

&lt;p&gt;AI agents need structured contracts to reason about. An agent can parse a capability spec, understand what tools are available, what inputs they require, and what outputs they produce. It cannot do the same with custom integration code spread across multiple repos.&lt;/p&gt;

&lt;p&gt;When the spec is the integration, AI agents can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover available capabilities by reading specs&lt;/li&gt;
&lt;li&gt;Call tools reliably because the contract is deterministic&lt;/li&gt;
&lt;li&gt;Propose spec refinements based on usage patterns&lt;/li&gt;
&lt;li&gt;Validate consistency without reverse-engineering code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SDI is not just a cleaner way to build integrations. It is the prerequisite for AI agents to use your integrations reliably. What I like about SDI, is it takes what we have been investing in for the last decade and helps me integrate AI into existing operational workflows I've worked hard on for years.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/naftiko/framework/wiki/Spec%E2%80%90Driven-Integration" rel="noopener noreferrer"&gt;Read the full methodology&lt;/a&gt; | &lt;a href="https://github.com/naftiko/fleet?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=methodology-spec-driven-integration&amp;amp;utm_content=sdi-stop-writing-code-devto" rel="noopener noreferrer"&gt;Explore the Naftiko Fleet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>devops</category>
      <category>automation</category>
    </item>
    <item>
      <title>A Big Four Firm Just Ranked #1 in API Investment. Ahead of Every Tech Company.</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Thu, 16 Apr 2026 14:32:01 +0000</pubDate>
      <link>https://dev.to/kinlane/a-big-four-firm-just-ranked-1-in-api-investment-ahead-of-every-tech-company-33l3</link>
      <guid>https://dev.to/kinlane/a-big-four-firm-just-ranked-1-in-api-investment-ahead-of-every-tech-company-33l3</guid>
      <description>&lt;p&gt;At &lt;a href="https://naftiko.io" rel="noopener noreferrer"&gt;Naftiko&lt;/a&gt;, We track technology investment signals across 292 companies at Naftiko — APIs, AI, cloud, data, security, governance, automation, integrations. Scored and ranked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://signals.naftiko.io/companies/#ey" rel="noopener noreferrer"&gt;EY ranks number one&lt;/a&gt;. Not among professional services firms. Across all 292 companies. Ahead of Citi, UnitedHealth, Morgan Stanley, Cisco, Visa, Nvidia, and Alphabet.&lt;/p&gt;

&lt;p&gt;An accounting firm. Number one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;p&gt;EY scores 2,603 points. The professional services sector overall:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EY: 2,603 (22.8% of sector)&lt;/li&gt;
&lt;li&gt;Accenture: 2,022&lt;/li&gt;
&lt;li&gt;Booz Allen: 1,447&lt;/li&gt;
&lt;li&gt;McKinsey: 1,435&lt;/li&gt;
&lt;li&gt;KPMG: 1,200&lt;/li&gt;
&lt;li&gt;PwC: 1,155&lt;/li&gt;
&lt;li&gt;Bain: 991&lt;/li&gt;
&lt;li&gt;Deloitte: 572&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EY leads every category. APIs, AI, cloud, data, security, governance, services, integrations, containers, observability. Broad, deep, consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why professional services is ahead
&lt;/h2&gt;

&lt;p&gt;Technology as a sector scores 44,840 points — but across 49 companies (avg 915 each). Professional services scores 11,425 across 8 companies (avg 1,428 each). Per-company investment density is 56% higher than technology.&lt;/p&gt;

&lt;p&gt;The reason is structural. Professional services firms don't build one product. They build integration and transformation capabilities for every client, across every industry. A single firm like EY needs competency in financial services data platforms, healthcare interoperability, manufacturing automation, retail personalization, and energy management — simultaneously.&lt;/p&gt;

&lt;p&gt;They also sit at the intersection of business strategy and technical implementation. They wire SAP to Salesforce, connect Workday to Azure AD, build data pipelines from Oracle to Snowflake. Their API and integration investment is not aspirational. It is operational.&lt;/p&gt;

&lt;h2&gt;
  
  
  What EY is doing differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cloud and data are the foundation.&lt;/strong&gt; Cloud (219) and data (222) are where enterprises build the platforms AI agents will consume. EY is investing in the substrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance is a differentiator.&lt;/strong&gt; 92 points — significantly ahead of the field. For an audit and compliance firm, this makes strategic sense. But it also positions them for AI agent governance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security is the highest in the sector.&lt;/strong&gt; 139 points. In a world where AI agents are about to get API access to enterprise systems, security investment is the prerequisite for adoption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for developers
&lt;/h2&gt;

&lt;p&gt;The professional services investment pattern maps directly to what AI agent infrastructure needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover and inventory APIs across environments with hundreds of services&lt;/li&gt;
&lt;li&gt;Govern API access with identity propagation, policy enforcement, and audit trails&lt;/li&gt;
&lt;li&gt;Compose capabilities from existing APIs into reusable units of work&lt;/li&gt;
&lt;li&gt;Observe what agents are doing and whether integrations work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Professional services firms are the most integration-intensive organizations on the planet. They are investing accordingly. The question is whether the rest of the enterprise world catches up before the agents arrive, or after. For me, this is counter to what I read about professional services companies in mainstream team press, that they are irrelevant and going away.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://industries.naftiko.io/signals/professional-services/8jdyBqh8nG/" rel="noopener noreferrer"&gt;explore the full signals data&lt;/a&gt; and run governed AI capabilities yourself using the open-source &lt;a href="https://github.com/naftiko/fleet?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=industry-professional-services&amp;amp;utm_content=ey-most-invested-devto" rel="noopener noreferrer"&gt;Naftiko Fleet&lt;/a&gt;. Feel free to email me personally at &lt;a href="mailto:kinlane@naftiko.io"&gt;kinlane@naftiko.io&lt;/a&gt; if you have any questions.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Making Your APIs Visible Using Capabilities for GitHub 7 GitBook Discovery and Documentation</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Wed, 15 Apr 2026 21:26:40 +0000</pubDate>
      <link>https://dev.to/kinlane/making-your-apis-visible-using-capabilities-for-github-7-gitbook-discovery-and-documentation-mno</link>
      <guid>https://dev.to/kinlane/making-your-apis-visible-using-capabilities-for-github-7-gitbook-discovery-and-documentation-mno</guid>
      <description>&lt;p&gt;Your organization has more APIs than anyone thinks. Specs are scattered across GitHub repos. Docs exist in GitBook spaces that were created for a launch and never updated. Some APIs have specs but no docs. Others have docs but no specs. A handful have neither.&lt;/p&gt;

&lt;p&gt;This is the API visibility problem, and it's universal. GitHub and GitBook are both excellent platforms. The gap is the workflow between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capabilities
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/naftiko/fleet?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=collection-api-discovery-and-documentation&amp;amp;utm_content=docs-drifting-devto" rel="noopener noreferrer"&gt;Naftiko capabilities&lt;/a&gt; — each a portable YAML file that consumes the GitHub and/or GitBook APIs and exposes MCP tools for the workflows that documentation writers and governance teams need. No code generation, no SDK, no platform subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery
&lt;/h2&gt;

&lt;p&gt;Helping you with your API discovery.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub OpenAPI Scanner&lt;/strong&gt; — scans every repo in a GitHub org for OpenAPI/AsyncAPI specs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitBook Space Auditor&lt;/strong&gt; — checks spaces for completeness, staleness, missing descriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Documentation Gap Analyzer&lt;/strong&gt; — compares GitHub specs vs GitBook docs, finds gaps in both directions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation Coverage Scorer&lt;/strong&gt; — measures what percentage of API operations are documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the scanner:&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;naftiko&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.5"&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Scanner"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scans&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;organization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repositories&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;AsyncAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specification&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;building&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;an&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;inventory&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;every&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;definition&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;across&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;org."&lt;/span&gt;
&lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;exposes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp"&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spec-scanner"&lt;/span&gt;
      &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scan-org-for-specs"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scans&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repositories&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;organization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;AsyncAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specification&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files."&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;org&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;search-openapi&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github.search-code"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org:{{org}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;filename:openapi"&lt;/span&gt;
                &lt;span class="na"&gt;per_page&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;search-asyncapi&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github.search-code"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org:{{org}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;filename:asyncapi"&lt;/span&gt;
                &lt;span class="na"&gt;per_page&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
  &lt;span class="na"&gt;consumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github"&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http"&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.github.com"&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bearer"&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{github_token}}"&lt;/span&gt;
      &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github_token"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;header"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/vnd.github+json"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-GitHub-Api-Version"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;header"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022-11-28"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;code-search"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Search"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;across&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repositories"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/search/code"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search-code"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Code"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's the gap analyzer that compares both platforms:&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;naftiko&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.5"&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Documentation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Gap&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Analyzer"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Compares&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specifications&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;discovered&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;against&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;documentation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;published&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;identify&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;undocumented&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;APIs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;orphaned&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;docs."&lt;/span&gt;
&lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;exposes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp"&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gap-analyzer"&lt;/span&gt;
      &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compare-specs-to-docs"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Searches&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;documentation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spaces,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;then&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;compares&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;two&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;identify&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;gaps."&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;org&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitbook_orgId&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;find-github-specs&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github.search-code"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org:{{org}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;filename:openapi"&lt;/span&gt;
                &lt;span class="na"&gt;per_page&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;find-gitbook-spaces&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook.list-spaces"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;orgId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_orgId}}"&lt;/span&gt;
  &lt;span class="na"&gt;consumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github"&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http"&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.github.com"&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bearer"&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{github_token}}"&lt;/span&gt;
      &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github_token"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;header"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/vnd.github+json"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;code-search"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Search"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/search/code"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search-code"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Code"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook"&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http"&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.gitbook.com/v1"&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bearer"&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_token}}"&lt;/span&gt;
      &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook_token"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org-spaces"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Organization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Spaces"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/orgs/{{orgId}}/spaces"&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;orgId"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list-spaces"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Spaces"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GitHub → GitBook
&lt;/h2&gt;

&lt;p&gt;Keeping your repos in alignment with what teams do in Gitbook.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub-to-GitBook Spec Publisher&lt;/strong&gt; — fetches specs from GitHub, creates GitBook spaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Catalog Publisher&lt;/strong&gt; — aggregates multi-repo specs into a browsable GitBook collection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAPI GitBook Uploader&lt;/strong&gt; — uploads specs to GitBook's native interactive API viewer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Changelog Publisher&lt;/strong&gt; — generates changelogs from spec diffs, publishes to GitBook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the publisher capabilty:&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;naftiko&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.5"&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GitHub-to-GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Spec&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Publisher"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Discovers&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specifications&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repositories&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;publishes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;them&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;structured&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;documentation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spaces."&lt;/span&gt;
&lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;exposes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp"&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spec-publisher"&lt;/span&gt;
      &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;publish-spec-to-gitbook"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fetches&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;an&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spec&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repo&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;creates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;space&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spec&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content."&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;owner&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;repo&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spec_path&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitbook_orgId&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;space_title&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fetch-spec&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github.get-file-contents"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{owner}}"&lt;/span&gt;
                &lt;span class="na"&gt;repo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{repo}}"&lt;/span&gt;
                &lt;span class="na"&gt;file_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{spec_path}}"&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create-space&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook.create-space"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;orgId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_orgId}}"&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{space_title}}"&lt;/span&gt;
                &lt;span class="na"&gt;visibility&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;public"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;batch-publish-org-specs"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scans&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitHub&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;org&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;publishes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;each&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;space."&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;org&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitbook_orgId&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;find-specs&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github.search-code"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org:{{org}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;filename:openapi"&lt;/span&gt;
                &lt;span class="na"&gt;per_page&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;list-existing&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook.list-spaces"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;orgId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_orgId}}"&lt;/span&gt;
  &lt;span class="na"&gt;consumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github"&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http"&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.github.com"&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bearer"&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{github_token}}"&lt;/span&gt;
      &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github_token"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;header"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/vnd.github+json"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;repo-contents"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Repository&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;File&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Contents"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/repos/{{owner}}/{{repo}}/contents/{{file_path}}"&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;owner"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;repo"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file_path"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get-file-contents"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;File&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Contents"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;code-search"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Search"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/search/code"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search-code"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Code"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook"&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http"&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.gitbook.com/v1"&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bearer"&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_token}}"&lt;/span&gt;
      &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook_token"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;org-spaces"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Organization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Spaces"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/orgs/{{orgId}}/spaces"&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;orgId"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list-spaces"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Spaces"&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create-space"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Create&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Space"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openapi-specs"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Specs"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/spaces/{{spaceId}}/openapi"&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spaceId"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;upload-openapi"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Upload&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OpenAPI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Spec"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GitBook → GitHub
&lt;/h2&gt;

&lt;p&gt;Now let's go back the other way from GitHub to Gitbook.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitBook-to-GitHub Spec Centralizer&lt;/strong&gt; — extracts docs from GitBook, commits to a central GitHub repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Repo Spec Consolidator&lt;/strong&gt; — consolidates scattered specs into one canonical repo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Governance
&lt;/h2&gt;

&lt;p&gt;Now you can govern things because you know where the APIs are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitBook-GitHub Doc Sync&lt;/strong&gt; — bi-directional sync, detects drift&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Doc Freshness Monitor&lt;/strong&gt; — flags stale documentation before consumers notice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitBook Change Request Reviewer&lt;/strong&gt; — PR-style review for documentation updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitBook Collection Organizer&lt;/strong&gt; — organizes spaces into domain-based collections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Style Guide Enforcer&lt;/strong&gt; — validates docs against style guidelines, creates fix requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitBook Search Indexer&lt;/strong&gt; — cross-space search, duplicate detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the style guide enforcer — it searches for banned terms and creates change requests for fixes:&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;naftiko&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.5"&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Style&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Guide&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Enforcer"&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Validates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;documentation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GitBook&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;against&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;organizational&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;style&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;guidelines."&lt;/span&gt;
&lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;exposes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp"&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;style-enforcer"&lt;/span&gt;
      &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search-for-banned-terms"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Searches&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;terminology&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;that&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;violates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;style&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;guide."&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gitbook_orgId&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;banned_term&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;search-content&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook.search-content"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;orgId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_orgId}}"&lt;/span&gt;
                &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{banned_term}}"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create-style-fix-request"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Creates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;change&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;track&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;style&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;violation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fix."&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spaceId&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;violation_summary&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fix_description&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;query&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
          &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create-cr&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;call&lt;/span&gt;
              &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook.create-change-request"&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;spaceId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{spaceId}}"&lt;/span&gt;
                &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{violation_summary}}"&lt;/span&gt;
                &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{fix_description}}"&lt;/span&gt;
  &lt;span class="na"&gt;consumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook"&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http"&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.gitbook.com/v1"&lt;/span&gt;
      &lt;span class="na"&gt;authentication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bearer"&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{gitbook_token}}"&lt;/span&gt;
      &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitbook_token"&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/orgs/{{orgId}}/search"&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;orgId"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search-content"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Content"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;change-requests"&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Change&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Requests"&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/spaces/{{spaceId}}/change-requests"&lt;/span&gt;
          &lt;span class="na"&gt;inputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spaceId"&lt;/span&gt;
              &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create-change-request"&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST"&lt;/span&gt;
              &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Create&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Change&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Request"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;I am not sure how you organization operates, and I tried to cover the bases.&lt;/p&gt;

&lt;p&gt;Each capability is a Naftiko 0.5 YAML file that declares:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What APIs it &lt;strong&gt;consumes&lt;/strong&gt; (GitHub, GitBook, or both)&lt;/li&gt;
&lt;li&gt;What MCP tools it &lt;em&gt;exposes&lt;/em&gt;*&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All you do is point the Naftiko Framework at the YAML, and it serves live MCP tools, agent skills, and REST endpoints. The YAML is the runtime — no code generation required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why capabilities for this
&lt;/h2&gt;

&lt;p&gt;The individual API calls are simple. The hard part is doing them consistently, across every repo and every space, over time. Manual processes don't scale. One-time audits go stale. Documentation sprints easily get deprioritized.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/naftiko/fleet?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=collection-api-discovery-and-documentation&amp;amp;utm_content=docs-drifting-devto" rel="noopener noreferrer"&gt;Capabilities make the workflow repeatable&lt;/a&gt;. Run them on a schedule, wire them into your CI, or invoke the MCP tools from an agent. The more alignment you can bring, the more likely you'll be governing the right things. You can't govern what you don't see.&lt;/p&gt;

</description>
      <category>github</category>
      <category>gitbook</category>
      <category>api</category>
      <category>documentation</category>
    </item>
    <item>
      <title>The 5 Hardest Problems in Context Engineering Right Now</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Tue, 14 Apr 2026 18:55:46 +0000</pubDate>
      <link>https://dev.to/kinlane/the-5-hardest-problems-in-context-engineering-right-now-3a38</link>
      <guid>https://dev.to/kinlane/the-5-hardest-problems-in-context-engineering-right-now-3a38</guid>
      <description>&lt;p&gt;Context engineering is not prompt engineering. It is an emerging discipline focused on optimizing context windows for AI agents, translating upstream APIs and MCP servers into efficient tool interfaces, and building evaluation frameworks for agent-API interaction quality.&lt;/p&gt;

&lt;p&gt;If you are working with agents and MCP tools, you are probably running into these problems already. Here are the five we keep seeing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. No agent evaluation framework&lt;/strong&gt;&lt;br&gt;
You need to know whether your agent called the right API with the right parameters in the right order — not just whether the output text looks reasonable.&lt;/p&gt;

&lt;p&gt;Most evaluation today stops at the surface. Did the LLM produce something plausible? That is necessary but not sufficient. An agent that returns a confident summary while calling the wrong endpoint with the wrong payload is worse than one that errors out, because the failure is invisible.&lt;/p&gt;

&lt;p&gt;What we need: evaluation frameworks that inspect the actual state of upstream services after an agent acts. Did the record get created? Did the right field get updated? Was the sequence of API calls correct? This is integration testing for autonomous systems, and the tooling barely exists.&lt;/p&gt;

&lt;p&gt;Compounding the problem: different models behave differently with the same tool definitions. What works on Sonnet may break on Opus. Evaluation needs to be model-aware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Too many MCP tools&lt;/strong&gt;&lt;br&gt;
The MCP ecosystem is growing fast. The problem is that an agent with access to 40 tools performs worse than one with 4 well-designed tools.&lt;/p&gt;

&lt;p&gt;Context windows are not infinite. Every tool description consumes tokens. Every similar-sounding tool creates decision overhead for the model. Context engineers need to consolidate sprawling API surfaces into minimal, precise tool interfaces.&lt;/p&gt;

&lt;p&gt;This is the core design problem in context engineering: compression without information loss. You need to understand the upstream API semantics AND the downstream model behavior, then find the minimal translation between them. The right translation differs by model, task, and user intent.&lt;/p&gt;

&lt;h1&gt;
  
  
  What many teams ship:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;list_users&lt;/li&gt;
&lt;li&gt;get_user&lt;/li&gt;
&lt;li&gt;create_user&lt;/li&gt;
&lt;li&gt;update_user&lt;/li&gt;
&lt;li&gt;delete_user&lt;/li&gt;
&lt;li&gt;list_user_roles&lt;/li&gt;
&lt;li&gt;get_user_role&lt;/li&gt;
&lt;li&gt;assign_user_role&lt;/li&gt;
&lt;li&gt;... (30 more tools)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What the agent actually needs:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;query_resource (list, get, filter across entities)&lt;/li&gt;
&lt;li&gt;mutate_resource (create, update, delete with validation)&lt;/li&gt;
&lt;li&gt;manage_permissions (roles, assignments)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The consolidation is not mechanical. It is a design problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. MCP workflows need embedded question formation&lt;/strong&gt;&lt;br&gt;
"Ask anything" interfaces sound great in demos. In practice, they fail when developers don't know what to ask.&lt;/p&gt;

&lt;p&gt;This is the cold-start problem for MCP-powered copilots. A developer who asks the wrong question gets a confident-sounding answer to the wrong question — and might not realize it until something breaks downstream.&lt;/p&gt;

&lt;p&gt;Context engineers are discovering that documentation layers need to embed question formation into the workflow. Instead of just answering the current question, the system should suggest the next question based on where the developer is in their workflow.&lt;/p&gt;

&lt;p&gt;Think of it like this: traditional docs are a reference book. What agents need is a guided workflow that knows which page you need before you know to look for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Repos need minimum agent operational docs&lt;/strong&gt;&lt;br&gt;
Your repo looks well-documented. README, API docs, architecture decision records, inline comments. A human developer can onboard in a day.&lt;/p&gt;

&lt;p&gt;An agent tries to run the test suite and fails immediately.&lt;/p&gt;

&lt;p&gt;Why? Because "run the setup script" requires a human to infer which script, navigate to the right directory, set environment variables, and interpret error messages. An agent needs all of that explicit:&lt;/p&gt;

&lt;p&gt;Which script (exact path)&lt;br&gt;
What arguments&lt;br&gt;
What environment variables must be set (and valid values)&lt;br&gt;
What the expected output looks like&lt;br&gt;
What to do when output doesn't match&lt;br&gt;
Context engineers are defining "minimum agent operational documentation" — the baseline structured docs a repo needs before agents can reliably operate within it. This is not replacing human docs. It is a parallel, machine-readable layer.&lt;/p&gt;

&lt;p&gt;The interesting side effect: making docs agent-consumable usually makes them better for humans too, because it forces you to close the gaps everyone was silently working around.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Markdown needs standardized structures&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the most foundational problem and it affects everything else.&lt;/p&gt;

&lt;p&gt;Most markdown is written for human readability: inconsistent heading hierarchies, ambiguous section boundaries, sections that depend on context from earlier in the document, formatting that prioritizes aesthetics over structure.&lt;/p&gt;

&lt;p&gt;Agents need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent heading structures&lt;/li&gt;
&lt;li&gt;Explicit section boundaries&lt;/li&gt;
&lt;li&gt;Self-contained sections (no dependency on prior context)&lt;/li&gt;
&lt;li&gt;Metadata indicating what kind of information each section contains&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap between "human-readable markdown" and "agent-consumable markdown" is wider than most teams expect. Every MCP server serving markdown content, every copilot referencing project docs, every automated workflow reading a README is affected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The common thread&lt;/strong&gt;&lt;br&gt;
These problems exist because infrastructure built for human-only workflows does not transfer cleanly to agent-augmented workflows. Context engineering is the discipline of building that translation layer.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://naftiko.io" rel="noopener noreferrer"&gt;Naftiko&lt;/a&gt;, we are building the governed, spec-driven capability layer between enterprise APIs and AI agents. These are exactly the problems we are solving.&lt;/p&gt;

&lt;p&gt;If you are running into any of these in your own work, I'd like to hear about it in the comments.&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>automation</category>
      <category>saas</category>
    </item>
    <item>
      <title>Naftiko Framework Alpha 1: Turning API Sprawl Into Governed Capabilities for AI</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Tue, 07 Apr 2026 23:16:57 +0000</pubDate>
      <link>https://dev.to/kinlane/naftiko-framework-alpha-1-turning-api-sprawl-into-governed-capabilities-for-ai-56ea</link>
      <guid>https://dev.to/kinlane/naftiko-framework-alpha-1-turning-api-sprawl-into-governed-capabilities-for-ai-56ea</guid>
      <description>&lt;p&gt;I have been writing about API sprawl for fifteen years. The shape of the problem has not really changed — large enterprises now run an average of 1,295 SaaS applications and over 14,000 internal APIs, with AI-related APIs up 807% year over year — but the stakes have. The agents are here. They want to consume everything. And nobody has a clear story for how to give them safe, governed access to what already exists without rebuilding the world.&lt;/p&gt;

&lt;p&gt;Today we are shipping the first alpha of the &lt;a href="https://github.com/naftiko/framework" rel="noopener noreferrer"&gt;Naftiko Framework&lt;/a&gt;. It is Apache 2.0, declarative, Java-based, and built around one simple idea: your existing data and APIs are not technical debt. They are strategic inventory. They just need to be made discoverable, governed, and reusable as &lt;strong&gt;capabilities&lt;/strong&gt; instead of scattered projects nobody can find.&lt;/p&gt;

&lt;p&gt;This post is a walkthrough of what shipped, why the spec-driven integration approach matters, and what it looks like to actually build with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: MCP sprawl on top of API sprawl
&lt;/h2&gt;

&lt;p&gt;If you are reading dev.to, you have probably already lived this. The first MCP integrations go great. The second wave starts to feel a little ad-hoc. By the time you are wiring your fifth or sixth tool, you realize you are just re-creating API sprawl one layer up — except now the ungoverned thing is talking directly to a model that will happily call it a thousand times in a runaway loop.&lt;/p&gt;

&lt;p&gt;The trigger symptoms are familiar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP sprawl on top of API sprawl&lt;/li&gt;
&lt;li&gt;Teams shipping prototypes, but nothing makes it to production&lt;/li&gt;
&lt;li&gt;Security and compliance becoming the bottleneck&lt;/li&gt;
&lt;li&gt;Costs that are impossible to predict (tokens, models, &lt;em&gt;and&lt;/em&gt; upstream API usage)&lt;/li&gt;
&lt;li&gt;Specs that "age like bananas"&lt;/li&gt;
&lt;li&gt;You can't govern, secure, or reuse what you can't see&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest answer is that the existing toolchain — API gateways, iPaaS, ad-hoc MCP servers — was not built for this. We need a different unit of work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unit: a capability
&lt;/h2&gt;

&lt;p&gt;Naftiko's answer is the &lt;strong&gt;capability&lt;/strong&gt;. A capability is a YAML file that declares two things: what it &lt;strong&gt;consumes&lt;/strong&gt; (the upstream APIs it calls) and what it &lt;strong&gt;exposes&lt;/strong&gt; (the surfaces it offers — MCP, Skill, or REST).&lt;/p&gt;

&lt;p&gt;Here is a real example from the Shipyard tutorial:&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;naftiko&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0-alpha1"&lt;/span&gt;

&lt;span class="na"&gt;capability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;consumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;registry&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
      &lt;span class="na"&gt;baseUri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://registry.shipyard.dev/api/v1"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ships&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/ships"&lt;/span&gt;
          &lt;span class="na"&gt;operations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;list-ships&lt;/span&gt;
              &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GET&lt;/span&gt;

  &lt;span class="na"&gt;exposes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mcp&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3001&lt;/span&gt;
      &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shipyard-tools&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Shipyard&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;MCP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tools&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fleet&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;management"&lt;/span&gt;
      &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;list-ships&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ships&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;shipyard"&lt;/span&gt;
          &lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;registry.list-ships&lt;/span&gt;
          &lt;span class="na"&gt;outputParameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;array&lt;/span&gt;
              &lt;span class="na"&gt;mapping&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$."&lt;/span&gt;
              &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;consumes&lt;/code&gt; declares where the data lives. &lt;code&gt;exposes&lt;/code&gt; declares what the agent sees. &lt;code&gt;call: registry.list-ships&lt;/code&gt; is the wire between the two. The &lt;code&gt;outputParameters&lt;/code&gt; block reshapes the upstream payload — renaming &lt;code&gt;imo_number&lt;/code&gt; to &lt;code&gt;imoNumber&lt;/code&gt;, dropping fields the agent does not need — so the model never sees the raw API surface.&lt;/p&gt;

&lt;p&gt;That is the whole idea. The spec is the integration. Not a description of it, not documentation written after the fact — the actual runnable artifact. The Naftiko Engine reads this YAML at runtime and serves it as a live MCP server. There is no code generation step, no compilation, no drift between what is documented and what is running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spec-driven integration, in plain terms
&lt;/h2&gt;

&lt;p&gt;The methodology behind this is what we are calling &lt;strong&gt;Spec-Driven Integration (SDI)&lt;/strong&gt;. It is the integration-domain cousin of spec-driven development, and it rests on a few principles that I keep coming back to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specifications as the lingua franca.&lt;/strong&gt; The spec is the single source of truth. Maintaining an integration means evolving its spec. Everything else is derived.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executable specifications.&lt;/strong&gt; A spec is only valuable if it is precise enough to produce a working integration directly. If it cannot be executed as-is, the gap is a signal of incompleteness — not an invitation for interpretation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous refinement.&lt;/strong&gt; Specs are linted, validated, and analyzed for ambiguity throughout their lifecycle, not at a single approval gate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bidirectional feedback.&lt;/strong&gt; Production behavior feeds back into the spec. The spec is a living artifact, not a snapshot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why this matters for AI integration specifically: context engineering is fundamentally an integration problem. Agents need the right data, in the right shape, at the right time. When the spec is the artifact, agents (and the humans operating them) can reason about integrations, propose refinements, and validate consistency against a structured contract — instead of poking at opaque runtime behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four levels of progressive abstraction
&lt;/h2&gt;

&lt;p&gt;Naftiko meets your APIs where they are. The framework introduces a four-level progressive abstraction model for consumed APIs, so you do not have to rip and rebuild anything:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Forwarding HTTP client&lt;/strong&gt; — forward any HTTP call with shared endpoint behavior like authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templatized HTTP client&lt;/strong&gt; — reuse predefined request collections imported from HAR, Postman, or similar formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured API client&lt;/strong&gt; — abstract HTTP calls into clean web API paths and operations, enabling reuse across teams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional MCP client&lt;/strong&gt; — abstract structured APIs into MCP tools, resources, and prompts for context engineering and agent orchestration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can climb the ladder one capability at a time. Start by forwarding. Move to structured. Reach the top when it makes sense to. Nothing forces a wholesale rearchitecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ships in Alpha 1
&lt;/h2&gt;

&lt;p&gt;The alpha release covers three areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Right-sized AI context&lt;/strong&gt; — declarative applied capabilities that expose Agent Skills, plus MCP support for Resources and Prompts alongside existing Tools support. The &lt;code&gt;outputParameters&lt;/code&gt; story above is the key here: capabilities shape response payloads into smaller, typed outputs aligned to tasks instead of dumping raw provider complexity into a context window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API reusability&lt;/strong&gt; — lookups within API call steps, consumer authentication and permissions for API and MCP servers, reusable source HTTP adapter declarations across capabilities, and applied capabilities that compose multiple sources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core developer experience&lt;/strong&gt; — published artifacts on Maven Central and Docker Hub, Javadocs on javadoc.io, a Naftiko Skill based on the CLI, a Spectral-based ruleset for spec governance, JSON structure validation, a GitHub Action template based on Super Linter, and a comprehensive wiki with FAQ, getting started guide, and roadmap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alongside the framework, the &lt;strong&gt;Naftiko Fleet Community Edition&lt;/strong&gt; is also free. It ships with a VS Code extension for live structure and rules validation of capability YAML files, and Backstage templates that scaffold new capabilities and bootstrap their Git repositories. The Community Edition will always be free. Standard and Enterprise editions will add what large organizations need — SLAs, federation, continuous compliance, domain-level governance — but the framework itself stays open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance as guidance, not gatekeeping
&lt;/h2&gt;

&lt;p&gt;One of the things I keep saying out loud in conversations with platform teams: governance has to be guidance, not gatekeeping. Naftiko's Spectral-based ruleset enforces 15 consistency rules at lint time, the VS Code extension surfaces them as you type, and the GitHub Action template runs them in CI. The point is to catch the things that matter — naming, schema, identity propagation, exposed contract shape — &lt;em&gt;before&lt;/em&gt; a capability ships, not to slow anyone down with a review board.&lt;/p&gt;

&lt;p&gt;When procurement eventually starts asking the question Sarah Guo predicts in her "Dark Code" essay — "what did your agents do with our data on a Tuesday in March?" — the answer is in the spec, the governance ruleset, and the engine telemetry. Not reconstructed from scattered logs after the fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this goes next
&lt;/h2&gt;

&lt;p&gt;The roadmap is on the wiki. The short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Alpha 2&lt;/strong&gt; (May 2026) — A2A server adapter, MCP authentication and gateway integration, webhook server adapter, conditional / for-each / parallel orchestration steps, OpenAPI-to-Naftiko import tooling, a Control API accessible via CLI, and starter capability templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beta&lt;/strong&gt; (June 2026) — stable spec, resilience patterns (retry, circuit breaker, rate limiter, time limiter, bulkhead), MCP server-side code mode, expanded governance with tags and labels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GA&lt;/strong&gt; (September 2026) — production-ready v1.0 with full test coverage, stable spec, and JSON Schema published to JSON Schema Store.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This is an alpha. The spec will move. The edges are rough in places. But the core idea — that capabilities are the right unit, that governance is guidance not gatekeeping, that the producer-consumer relationship in API land has to be rethought for the agent era — that part I am clear on.&lt;/p&gt;

&lt;p&gt;If you have spent any time thinking about MCP, AI integration, or how to give your security and compliance teams something better than a SOC 2 PDF, this is for you. Roll up your sleeves, pull the Docker image, walk through the Shipyard tutorial, and tell me where it breaks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/naftiko/fleet" rel="noopener noreferrer"&gt;github.com/naftiko/fleet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Wiki &amp;amp; docs: &lt;a href="https://github.com/naftiko/fleet/wiki" rel="noopener noreferrer"&gt;github.com/naftiko/fleet/wiki&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Wanted to Invite You to the Postman $100K API Hack</title>
      <dc:creator>Kin Lane</dc:creator>
      <pubDate>Wed, 06 Jan 2021 04:39:30 +0000</pubDate>
      <link>https://dev.to/kinlane/i-wanted-to-invite-you-to-the-postman-100k-api-hack-3ce0</link>
      <guid>https://dev.to/kinlane/i-wanted-to-invite-you-to-the-postman-100k-api-hack-3ce0</guid>
      <description>&lt;p&gt;Postman is an essential tool in my API development toolbox. I enjoy using it as an API client to onboard, test, and integrate with APIs, but I am also increasingly using it to also develop and automate with API. Since the release of &lt;a href="https://blog.postman.com/introducing-postman-public-workspaces/" rel="noopener noreferrer"&gt;Postman public workspaces&lt;/a&gt; in November I have been captivated with exploring what is possible with Postman when working with different, but more specifically what is possible when you automate and orchestrate with different APIs in a public workspace with public APIs—the possibilities are endless. What is cool about all of this is that I get paid do to this, and now you can too as part of the Postman $100K API Hack.&lt;/p&gt;

&lt;p&gt;To help bring attention what is possible on the Postman platform we are putting on a hack challenge for the next 30 days, encouraging developers to build something cool with Postman and any APIs they think are interesting, useful, or just cool. Here are the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hacking runs Jan. 5, 2021 (9 a.m. PST) to Jan. 25, 2021 (5 p.m. PST)&lt;/li&gt;
&lt;li&gt;$100,000 USD in cash prizes&lt;/li&gt;
&lt;li&gt;&lt;a href="https://postman-hack.devpost.com/rules" rel="noopener noreferrer"&gt;Read the official rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://postman-hack.devpost.com/" rel="noopener noreferrer"&gt;Register for the Postman API Hack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://postman-hack.devpost.com/resources" rel="noopener noreferrer"&gt;Get help on the Resources page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Watch the winners announced on February 3, 2021, at Postman Galaxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everyone who registers as part of the hack will get a  limited-edition Postman API Hack T-shirt, but we have designated four levels of prizes to award developers who put Postman to work in the most innovative and interesting ways.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1st Place, Intergalactic Grand Prize (1) - $25,000 USD awarded to the team with the best project&lt;/li&gt;
&lt;li&gt;2nd Place, Andromeda Prize (1) - $15,000 USD awarded to the team with the 2nd best project&lt;/li&gt;
&lt;li&gt;3rd Place, Nebula Prize (1) - $10,000 USD awarded to the team with the 3rd best project&lt;/li&gt;
&lt;li&gt;Honorable Mention, Moonshot Prize (10) - $5,000 USD prize awarded to the next ten highest scoring entries following the Grand Prize, Andromeda Prize, and Nebula Prize&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are thirteen different ways you can get paid to build cool things with Postman, using any API you want, or series of APIs to design, integrate, automate, orchestrate, and build any API-driven solution you can think up—here is what you need to do to get involved with the hack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://postman-hack.devpost.com/rules" rel="noopener noreferrer"&gt;Check out the official rules and FAQs for complete details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://postman-hack.devpost.com/" rel="noopener noreferrer"&gt;Join the hack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postman.com/postman-galaxy/" rel="noopener noreferrer"&gt;Register for the free Postman Galaxy API conference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://identity.getpostman.com/signup" rel="noopener noreferrer"&gt;Sign up for a Postman account&lt;/a&gt;, if you don’t already have one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To help get your imagination going we’ve &lt;a href="https://postman-hack.devpost.com/details/inspiration" rel="noopener noreferrer"&gt;posted some inspirational projects as part of the hack details&lt;/a&gt;. You can also find &lt;a href="http://workspaces.apievangelist.com/" rel="noopener noreferrer"&gt;a list of 200+ workspaces for many different types of interesting APIs to help demonstrate what is possible when you use the right APIs&lt;/a&gt;. I’ll be helping judge the hack, so I can give you a little insight into what I will be looking for as part of the review process--I am looking for interesting usage of interesting APIs in a collaborative way. Meaning, spend the time to put just the right API or APIs to work in a way that delivers something useful or is just really cool. I am looking for developers to demonstrate they get APIs and they get Postman, and have done the hard work to solve a real world problem using APIs.&lt;/p&gt;

&lt;p&gt;Alright, that is the scoop. I just wanted to invite you to our hack, and see what you can build. I am going to spend the next 30 days leading up to Postman Galaxy thinking about and talking about this hack. So, if you need any further inspiration or have questions about how to put the Postman feel free to reach out to me personally on Twitter at &lt;a href="https://twitter.com/apievangelist" rel="noopener noreferrer"&gt;@apievangelist&lt;/a&gt;. I have a pretty deep knowledge of the different types of APIs available out there, and I enjoy pushing the limits of what is possible with the Postman platform. I am also not afraid to tell you your idea needs more work and point out the really interesting aspects of what you are building. So, consider this your official invitation to the hack, and to let you know I am here to help support you in your journey as you work to bring home one of the prizes. I look forward to seeing what you and your team builds, and having you part of the Galaxy conference in February.&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>devchallenge</category>
      <category>news</category>
    </item>
  </channel>
</rss>
