{"id":423,"date":"2026-02-17T15:50:15","date_gmt":"2026-02-17T07:50:15","guid":{"rendered":"https:\/\/connectword.dpdns.org\/?p=423"},"modified":"2026-02-17T15:50:15","modified_gmt":"2026-02-17T07:50:15","slug":"agoda-open-sources-apiagent-to-convert-any-rest-pr-graphql-api-into-an-mcp-server-with-zero-code","status":"publish","type":"post","link":"https:\/\/connectword.dpdns.org\/?p=423","title":{"rendered":"Agoda Open Sources APIAgent to Convert Any REST pr GraphQL API into an MCP Server with Zero Code"},"content":{"rendered":"<p>Building AI agents is the new gold rush. But every developer knows the biggest bottleneck: getting the AI to actually communicate to your data. Today, travel giant Agoda is tackling this problem head-on. They have officially launched <strong>APIAgent<\/strong>, an open-source tool designed to turn any REST or GraphQL API into a Model Context Protocol (MCP) server with <strong>0 code<\/strong> and <strong>0 deployments<\/strong>.<\/p>\n<h3 class=\"wp-block-heading\"><strong>The Problem: The \u2018Integration Tax<\/strong>\u2018<\/h3>\n<p>Until recently, if you wanted your AI agent to check flight prices or look up a database, you had to write a custom tool. When Anthropic released the <strong>Model Context Protocol (MCP)<\/strong>, it created a standard way for Large Language Models (LLMs) to connect to external tools.<\/p>\n<p><strong>However, even with MCP, the workflow is tedious. A developer must:<\/strong><\/p>\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Write a new MCP server in Python or TypeScript.<\/li>\n<li>Define every tool and its parameters manually.<\/li>\n<li>Deploy and maintain that server.<\/li>\n<li>Update the code every time the underlying API changes.<\/li>\n<\/ol>\n<p>Agoda team calls this the \u2018integration tax.\u2019 For a company with 1000s of internal APIs, writing 1000s of MCP servers is not realistic. <strong>APIAgent<\/strong> is their answer to this scaling problem.<\/p>\n<h3 class=\"wp-block-heading\"><strong>What is APIAgent?<\/strong><\/h3>\n<p>APIAgent is a universal MCP server. Instead of writing custom logic for every API, you use APIAgent as a proxy. It sits between your LLM (like Claude or GPT-4) and your existing APIs.<\/p>\n<p><strong>The tool is built on a specific technical stack:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li><strong>FastMCP:<\/strong> Powers the MCP server layer.<\/li>\n<li><strong>OpenAI Agents SDK:<\/strong> Handles the language model orchestration.<\/li>\n<li><strong>DuckDB:<\/strong> An in-process SQL engine used for <strong>SQL post-processing<\/strong>.<\/li>\n<\/ul>\n<p>The \u2018magic\u2019 lies in its ability to understand API documentation. You provide a definition of your API\u2014using an <strong>OpenAPI<\/strong> specification for REST or a schema for <strong>GraphQL<\/strong>\u2014and APIAgent handles the rest.<\/p>\n<h3 class=\"wp-block-heading\"><strong>How It Works<\/strong>?<\/h3>\n<p>The architecture is straightforward. APIAgent acts as a gateway. <strong>When a user asks an AI agent a question, the flow looks like this:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li><strong>The Request:<\/strong> The user asks, \u2018Show me the top 10 hotels in Bangkok with the most reviews.\u2019<\/li>\n<li><strong>Schema Introspection:<\/strong> APIAgent automatically inspects the API schema to understand the available endpoints and fields.<\/li>\n<li><strong>The SQL Layer (DuckDB):<\/strong> This is the secret sauce. If the API returns 10,000 unsorted rows, APIAgent uses <strong>DuckDB<\/strong> to filter, sort, and aggregate that data locally via SQL before sending the concise result back to the LLM.<\/li>\n<li><strong>The Response:<\/strong> The JSON data travels back through APIAgent, which formats it for the AI to read.<\/li>\n<\/ul>\n<p>This system uses <strong>Dynamic Tool Discovery<\/strong>. You can point APIAgent at any URL, and it automatically generates the necessary tools for the LLM without manual mapping.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Key Feature: \u2018Recipe\u2019 Learning<\/strong><\/h3>\n<p>One of the key features is <strong>Recipe Learning<\/strong>. When a complex natural language query successfully executes, APIAgent can extract the trace and save it as a \u2018Recipe.\u2019<\/p>\n<ul class=\"wp-block-list\">\n<li>These recipes are <strong>parameterized templates<\/strong>.<\/li>\n<li>The next time a similar question is asked, APIAgent uses the recipe directly.<\/li>\n<li>This skips the expensive LLM reasoning step, which significantly reduces latency and cost.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>Key Takeaway<\/strong><\/h3>\n<ul class=\"wp-block-list\">\n<li><strong>Universal Protocol Bridge:<\/strong> APIAgent acts as a single, open-source proxy that converts any <strong>REST or GraphQL<\/strong> API into a Model Context Protocol (MCP) server. This removes the need to write custom boilerplate code or maintain individual MCP servers for every internal microservice.<\/li>\n<li><strong>Zero-Code Schema Introspection:<\/strong> The tool is \u2018configuration-first.\u2019 By simply pointing APIAgent at an <strong>OpenAPI spec<\/strong> or <strong>GraphQL endpoint<\/strong>, it automatically introspects the schema to understand endpoints and fields. It then exposes these to the LLM as functional tools without manual mapping.<\/li>\n<li><strong>Advanced SQL Post-Processing:<\/strong> It integrates <strong>DuckDB<\/strong>, an in-process SQL engine, to handle complex data manipulation. If an API returns thousands of unsorted rows or lacks specific filtering, APIAgent uses SQL to <strong>sort, aggregate, or join<\/strong> the data locally before delivering a concise answer to the AI.<\/li>\n<li><strong>Performance via \u2018Recipe Learning\u2019:<\/strong> To solve high latency and LLM costs, the agent features <strong>Recipe Learning<\/strong>. It records the successful execution trace of a natural language query and saves it as a <strong>parameterized template<\/strong>. <\/li>\n<li><strong>Security-First Architecture:<\/strong> The system is <strong>\u2018Safe by Default,<\/strong>\u2018 operating in a read-only state. Any \u2018mutating\u2019 actions (like <code>POST<\/code>, <code>PUT<\/code>, or <code>DELETE<\/code> requests) are strictly blocked by the proxy unless a developer explicitly whitelists them in the YAML configuration file.<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<p>Check out the\u00a0<strong><a href=\"https:\/\/www.agoda.com\/press\/agoda-launches-open-source-api-agent-to-simplify-mcp-server-integrations\/?cb=nn6rt7\" target=\"_blank\" rel=\"noreferrer noopener\">PR Here<\/a>.\u00a0<\/strong>Also,\u00a0feel free to follow us on\u00a0<strong><a href=\"https:\/\/x.com\/intent\/follow?screen_name=marktechpost\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Twitter<\/mark><\/a><\/strong>\u00a0and don\u2019t forget to join our\u00a0<strong><a href=\"https:\/\/www.reddit.com\/r\/machinelearningnews\/\" target=\"_blank\" rel=\"noreferrer noopener\">100k+ ML SubReddit<\/a><\/strong>\u00a0and Subscribe to\u00a0<strong><a href=\"https:\/\/www.aidevsignals.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">our Newsletter<\/a><\/strong>. Wait! are you on telegram?\u00a0<strong><a href=\"https:\/\/t.me\/machinelearningresearchnews\" target=\"_blank\" rel=\"noreferrer noopener\">now you can join us on telegram as well.<\/a><\/strong><\/p>\n<p>The post <a href=\"https:\/\/www.marktechpost.com\/2026\/02\/16\/agoda-open-sources-apiagent-to-convert-any-rest-pr-graphql-api-into-an-mcp-server-with-zero-code\/\">Agoda Open Sources APIAgent to Convert Any REST pr GraphQL API into an MCP Server with Zero Code<\/a> appeared first on <a href=\"https:\/\/www.marktechpost.com\/\">MarkTechPost<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Building AI agents is the new &hellip;<\/p>\n","protected":false},"author":1,"featured_media":29,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=423"}],"version-history":[{"count":0,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/media\/29"}],"wp:attachment":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}