{"id":3667,"date":"2025-10-03T08:46:45","date_gmt":"2025-10-03T08:46:45","guid":{"rendered":"https:\/\/www.infobip.com\/developers\/?p=3667"},"modified":"2025-12-17T13:15:47","modified_gmt":"2025-12-17T13:15:47","slug":"enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api","status":"publish","type":"post","link":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api","title":{"rendered":"Enabling Agent Communication. How to Build an MCP Server on Top of an API"},"content":{"rendered":"\n<p>MCP (Model Context Protocol) servers are quickly becoming a crucial layer between software systems and AI agents.&nbsp;&nbsp;In the context of systems that already expose a public API, MCP servers can be positioned as proxies, translating standardized API specifications into structured data that AI can easily consume. Done right, MCP servers allow AI agents to interact with external platforms, access data, trigger workflows, and perform complex operations\u2014all while staying decoupled from the underlying system.&nbsp;<\/p>\n\n\n\n<p>But here\u2019s the catch: <strong>building MCP servers isn\u2019t just about wrapping your API in a shiny new layer<\/strong>. If you do it naively, you\u2019ll expose too much, risk security, and run into schema nightmares.&nbsp;<\/p>\n\n\n\n<p>In his talk at the <a href=\"https:\/\/shift.infobip.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Shift Zadar 2025<\/a> conference, Filip Srnec, a Principal Engineer at Infobip, shares how Infobip approached the topic of creating their MCP servers, focusing on OpenAPI, schema design, and tricky features that can make or break your implementation.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"771\" src=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_131534126-1024x771.jpg\" alt=\"Filip Srnec on Shift Zadar 2025\" class=\"wp-image-3675\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_131534126-1024x771.jpg 1024w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_131534126-300x226.jpg 300w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_131534126-768x578.jpg 768w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_131534126-1536x1157.jpg 1536w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_131534126-2048x1542.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Filip Srnec giving his talk, How Can Agents Communicate. Unlocking AI Interactions with Infobip MCP Servers.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Core Idea: MCP as a Decoupled Layer<\/strong>&nbsp;<\/h2>\n\n\n\n<p>At its heart, an MCP server is <strong>another interface<\/strong> to your platform. AI agents can connect to the MCP layer. And in turn, the MCP layer can communicate with your core API stack. This means MCP can be fully <strong>decoupled<\/strong>\u2014not just a wrapper glued onto the existing endpoints.&nbsp;<\/p>\n\n\n\n<p>To scale the MCP servers, the natural question arises: can we deploy them dynamically from APIs? The answer is <strong>yes\u2014 by leveraging the <\/strong><a href=\"https:\/\/swagger.io\/specification\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>OpenAPI specification<\/strong><\/a><strong>.<\/strong>&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>OpenAPI: Your Blueprint for MCP Servers<\/strong>&nbsp;<\/h2>\n\n\n\n<p>OpenAPI gives you a formal, machine- and human-readable way to describe HTTP APIs.&nbsp;<\/p>\n\n\n\n<p>It\u2019s the perfect foundation for MCP because it provides a clear and standardized way to translate API endpoints into tools that AI agents can understand and use.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"538\" src=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.43.03-1024x538.png\" alt=\"MCP Tool official specification\" class=\"wp-image-3665\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.43.03-1024x538.png 1024w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.43.03-300x158.png 300w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.43.03-768x404.png 768w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.43.03-1536x808.png 1536w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.43.03-2048x1077.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\/server\/tools#data-types\" target=\"_blank\" rel=\"noreferrer noopener\">Official MCP tool data type specification<\/a><\/figcaption><\/figure>\n\n\n\n<p>The goal is one-to-one correspondence: every MCP operation should directly map to an API operation.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"557\" src=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.44.30-1024x557.png\" alt=\"MCP Tool in OpenAPI spec context\" class=\"wp-image-3666\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.44.30-1024x557.png 1024w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.44.30-300x163.png 300w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.44.30-768x418.png 768w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.44.30-1536x835.png 1536w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-10.44.30-2048x1113.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">An example of how to match API operations to the MCP tool data type specification.<\/figcaption><\/figure>\n\n\n\n<p>But this doesn\u2019t mean you should just expose your <strong>entire API spec<\/strong> to AI. That could result in suboptimal agentic experience.&nbsp;<\/p>\n\n\n\n<p>Filip stresses this point several times in his talk: <strong>build your MCP to match the AX you are after<\/strong>, rather than throwing everything you\u2019ve got at it.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Curate what\u2019s exposed, rewrite descriptions with context, and even restructure certain endpoints.&nbsp;<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Discriminator Problem<\/strong><\/h2>\n\n\n\n<p>According to Filip, one of the most powerful\u2014but also challenging\u2014parts of OpenAPI is the <strong>discriminator<\/strong>.&nbsp;<\/p>\n\n\n\n<p>MCP tools use standard JSON Schema, while <a href=\"https:\/\/swagger.io\/specification\/#discriminator-object\" target=\"_blank\" rel=\"noreferrer noopener\">OpenAPI<\/a>\u2019s version is a superset that includes features such as discriminators. We therefore need to translate discriminators into the standard JSON Schema format as effectively as possible.&nbsp;<\/p>\n\n\n\n<p>Let\u2019s say your API, just like Infobip\u2019s, supports sending messages using Viber or RCS. A single endpoint might handle multiple message types: text, images, video, files. The discriminator lets you define a property<strong>&nbsp; <\/strong>(e.g., &#8220;type&#8221;: &#8220;image&#8221;) that determines which input schema to use.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"502\" src=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.56.03-1024x502.png\" alt=\"Example of how to use a discriminator\" class=\"wp-image-3669\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.56.03-1024x502.png 1024w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.56.03-300x147.png 300w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.56.03-768x377.png 768w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.56.03-1536x753.png 1536w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.56.03.png 1574w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">An example of how to use a discriminator with a defined property.<\/figcaption><\/figure>\n\n\n\n<p>In theory, this is elegant. In practice, it introduces several challenges:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Validation complexity<\/strong> \u2013 The MCP server or the underlying platform needs to interpret the polymorphic input correctly.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Agent usability<\/strong> \u2013 If you don\u2019t process the discriminator carefully, the AI may get confused about which type to select.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>One practical way to mitigate the discriminator problem is by using the <strong>oneOf<\/strong> method in your schemas to bring them closer to the official JSON schema standard. This makes the schema easier for MCP servers to process and for AI agents to match, since the available options are explicit and self-contained.&nbsp;<\/p>\n\n\n\n<p>And that\u2019s exactly what matters most. The ability to provide <strong>accurate schemas in tool definitions<\/strong>, so that agents can reliably handle polymorphic schemas.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"518\" src=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.58.03-1024x518.png\" alt=\"discriminator flattening\" class=\"wp-image-3671\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.58.03-1024x518.png 1024w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.58.03-300x152.png 300w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.58.03-768x389.png 768w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.58.03-1536x777.png 1536w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/Screenshot-2025-09-23-at-11.58.03-2048x1036.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The oneOf method brings a schema closer to the official JSON schema standard, thereby bypassing the discriminator problem.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices for Building MCP Servers using the OpenAPI specification<\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Curate your OpenAPI spec<\/strong>&nbsp;<br>Don\u2019t expose every endpoint. Filter, rewrite, and annotate with context that helps AI agents, not developers.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Handle schema composition carefully<\/strong>&nbsp;<br>Merge parameters (query, headers, body, cookies) into a clean, unified input schema. Keep it simple for the agent.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Use discriminators wisely<\/strong>&nbsp;<br>Always provide clear examples for each type. Make sure the discriminator field is intuitive and consistent.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Resolve $refs up front<\/strong>&nbsp;<br>Inline schemas reduce complexity for the MCP consumer.&nbsp;<\/li>\n<\/ol>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>Plan for authentication<\/strong>&nbsp;<br>MCP servers sit in front of your APIs\u2014they\u2019re not auth servers. Reuse the existing platform authentication, but design filters to securely pass tokens or credentials downstream.&nbsp;<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>To see these principles applied, explore the <a href=\"https:\/\/github.com\/infobip\/mcp\">Infobip MCP servers<\/a> or dive into the open-source <a href=\"https:\/\/github.com\/infobip\/infobip-openapi-mcp\">Infobip OpenAPI MCP framework<\/a> to build your own.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Wrapping Up<\/strong>&nbsp;<\/h2>\n\n\n\n<p>MCP servers are on the rise\u2014but the real value comes when they\u2019re built with intention. Using OpenAPI as the foundation and handling tricky constructs with care makes all the difference.&nbsp;<\/p>\n\n\n\n<p>Get it wrong, and your agents will run into broken schemas, security risks, and inconsistent experiences. Get it right, and you\u2019ll have a scalable, AI-friendly interface that unlocks your platform\u2019s full potential.&nbsp;<\/p>\n\n\n\n<p>Following that exact logic, <a href=\"https:\/\/www.infobip.com\/mcp\" target=\"_blank\" rel=\"noreferrer noopener\">Infobip MCP servers<\/a> give your AI agents <strong>communication superpowers<\/strong>\u2014from sending a WhatsApp template message to managing customer data. <span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">Filip\u2019s talk, which covers many more valid points of creating MCP servers, will soon be available on&nbsp;<a href=\"https:\/\/www.youtube.com\/@ShiftConference\/playlists\" target=\"_blank\">Shift\u2019s YouTube<\/a>&nbsp;channel.<\/span> Stay tuned, Folks!&nbsp;<\/p>\n\n\n\n<p><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">You can also secure your spot on the next year\u2019s&nbsp;<a href=\"https:\/\/shift.infobip.com\/\" target=\"_blank\">Shift Zadar<\/a>&nbsp;conference, 13-15 September 2026, or attend the last Shift conference of the year in&nbsp;<a href=\"https:\/\/shift.infobip.com\/asia\/\" target=\"_blank\">Kuala Lumpur<\/a>, 3-5 November 2025.<\/span>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MCP (Model Context Protocol) servers are quickly becoming a [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":3664,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[50,28,248],"tags":[267,31,309],"coauthors":[134],"class_list":["post-3667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-blog-post","category-retrospective-infobip-events","tag-ai","tag-infobip-shift","tag-mcp-servers"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Enabling Agent Communication. How to Build an MCP Server on Top of an API - Infobip Developers Hub<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enabling Agent Communication. How to Build an MCP Server on Top of an API - Infobip Developers Hub\" \/>\n<meta property=\"og:description\" content=\"MCP (Model Context Protocol) servers are quickly becoming a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\" \/>\n<meta property=\"og:site_name\" content=\"Infobip Developers Hub\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/infobip\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-03T08:46:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-17T13:15:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1928\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joanna Suau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JoannaSuau\" \/>\n<meta name=\"twitter:site\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joanna Suau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\"},\"author\":{\"name\":\"Joanna Suau\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/707842627f046bb5722c37a9fdc85d62\"},\"headline\":\"Enabling Agent Communication. How to Build an MCP Server on Top of an API\",\"datePublished\":\"2025-10-03T08:46:45+00:00\",\"dateModified\":\"2025-12-17T13:15:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\"},\"wordCount\":990,\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg\",\"keywords\":[\"AI\",\"Infobip Shift\",\"MCP servers\"],\"articleSection\":[\"AI\",\"Blog Post\",\"Infobip events\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\",\"name\":\"Enabling Agent Communication. How to Build an MCP Server on Top of an API - Infobip Developers Hub\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg\",\"datePublished\":\"2025-10-03T08:46:45+00:00\",\"dateModified\":\"2025-12-17T13:15:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg\",\"width\":2560,\"height\":1928,\"caption\":\"Filip Srnec giving a talk on the Shift Zadar 2025 conference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.infobip.com\/developers\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enabling Agent Communication. How to Build an MCP Server on Top of an API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\",\"url\":\"https:\/\/www.infobip.com\/developers\/\",\"name\":\"Infobip Developers Hub\",\"description\":\"Build meaningful customer relationships across any channel\",\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.infobip.com\/developers\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\",\"name\":\"Infobip Developers Hub\",\"url\":\"https:\/\/www.infobip.com\/developers\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png\",\"width\":696,\"height\":696,\"caption\":\"Infobip Developers Hub\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/infobip\/\",\"https:\/\/x.com\/InfobipDev\",\"https:\/\/www.youtube.com\/channel\/UCUPSTy53VecI5GIir3J3ZbQ\",\"https:\/\/github.com\/infobip-community\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/707842627f046bb5722c37a9fdc85d62\",\"name\":\"Joanna Suau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/cccb05b0dfa8fde5d00a09f4047f929e\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b632afa61f1a27c1a0d823a9ec17eeb047cf476c570012dd90ba88a1bb9b1585?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b632afa61f1a27c1a0d823a9ec17eeb047cf476c570012dd90ba88a1bb9b1585?s=96&d=mm&r=g\",\"caption\":\"Joanna Suau\"},\"description\":\"Joanna is a Developer Educator at Infobip, working in the Developer Relations team.\",\"sameAs\":[\"https:\/\/medium.com\/@joanna.suau\",\"https:\/\/www.linkedin.com\/in\/joannasuau\/\",\"https:\/\/x.com\/JoannaSuau\"],\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/author\/joanna\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Enabling Agent Communication. How to Build an MCP Server on Top of an API - Infobip Developers Hub","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api","og_locale":"en_US","og_type":"article","og_title":"Enabling Agent Communication. How to Build an MCP Server on Top of an API - Infobip Developers Hub","og_description":"MCP (Model Context Protocol) servers are quickly becoming a [&hellip;]","og_url":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api","og_site_name":"Infobip Developers Hub","article_publisher":"https:\/\/www.facebook.com\/infobip\/","article_published_time":"2025-10-03T08:46:45+00:00","article_modified_time":"2025-12-17T13:15:47+00:00","og_image":[{"width":2560,"height":1928,"url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg","type":"image\/jpeg"}],"author":"Joanna Suau","twitter_card":"summary_large_image","twitter_creator":"@JoannaSuau","twitter_site":"@InfobipDev","twitter_misc":{"Written by":"Joanna Suau","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#article","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api"},"author":{"name":"Joanna Suau","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/707842627f046bb5722c37a9fdc85d62"},"headline":"Enabling Agent Communication. How to Build an MCP Server on Top of an API","datePublished":"2025-10-03T08:46:45+00:00","dateModified":"2025-12-17T13:15:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api"},"wordCount":990,"publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg","keywords":["AI","Infobip Shift","MCP servers"],"articleSection":["AI","Blog Post","Infobip events"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api","url":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api","name":"Enabling Agent Communication. How to Build an MCP Server on Top of an API - Infobip Developers Hub","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg","datePublished":"2025-10-03T08:46:45+00:00","dateModified":"2025-12-17T13:15:47+00:00","breadcrumb":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#primaryimage","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2025\/10\/PXL_20250916_132031827.MP_-scaled.jpg","width":2560,"height":1928,"caption":"Filip Srnec giving a talk on the Shift Zadar 2025 conference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.infobip.com\/developers\/blog\/enabling-agent-communication-how-to-build-an-mcp-server-on-top-of-an-api#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.infobip.com\/developers\/"},{"@type":"ListItem","position":2,"name":"Enabling Agent Communication. How to Build an MCP Server on Top of an API"}]},{"@type":"WebSite","@id":"https:\/\/www.infobip.com\/developers\/#website","url":"https:\/\/www.infobip.com\/developers\/","name":"Infobip Developers Hub","description":"Build meaningful customer relationships across any channel","publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.infobip.com\/developers\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.infobip.com\/developers\/#organization","name":"Infobip Developers Hub","url":"https:\/\/www.infobip.com\/developers\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png","width":696,"height":696,"caption":"Infobip Developers Hub"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/infobip\/","https:\/\/x.com\/InfobipDev","https:\/\/www.youtube.com\/channel\/UCUPSTy53VecI5GIir3J3ZbQ","https:\/\/github.com\/infobip-community"]},{"@type":"Person","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/707842627f046bb5722c37a9fdc85d62","name":"Joanna Suau","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/cccb05b0dfa8fde5d00a09f4047f929e","url":"https:\/\/secure.gravatar.com\/avatar\/b632afa61f1a27c1a0d823a9ec17eeb047cf476c570012dd90ba88a1bb9b1585?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b632afa61f1a27c1a0d823a9ec17eeb047cf476c570012dd90ba88a1bb9b1585?s=96&d=mm&r=g","caption":"Joanna Suau"},"description":"Joanna is a Developer Educator at Infobip, working in the Developer Relations team.","sameAs":["https:\/\/medium.com\/@joanna.suau","https:\/\/www.linkedin.com\/in\/joannasuau\/","https:\/\/x.com\/JoannaSuau"],"url":"https:\/\/www.infobip.com\/developers\/blog\/author\/joanna"}]}},"_links":{"self":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/comments?post=3667"}],"version-history":[{"count":8,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3667\/revisions"}],"predecessor-version":[{"id":3733,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3667\/revisions\/3733"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media\/3664"}],"wp:attachment":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media?parent=3667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/categories?post=3667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/tags?post=3667"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/coauthors?post=3667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}