{"id":3775,"date":"2026-02-05T12:54:20","date_gmt":"2026-02-05T12:54:20","guid":{"rendered":"https:\/\/www.infobip.com\/developers\/?p=3775"},"modified":"2026-02-05T12:54:20","modified_gmt":"2026-02-05T12:54:20","slug":"the-invisible-problem-how-we-solved-scheduling-with-ai","status":"publish","type":"post","link":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai","title":{"rendered":"The invisible problem. How we solved scheduling with AI\u00a0"},"content":{"rendered":"\n<p>Imagine your AI agent cheerfully accepts a request to &#8220;schedule a message for&nbsp;the&nbsp;next Monday at 1 PM&#8221; and then&nbsp;proceeds&nbsp;to schedule it for the wrong day because it thinks today is still the previous week. Or worse, it schedules the message for Monday at 1 PM UTC when the user meant 1 PM in their local timezone.&nbsp;And the&nbsp;message&nbsp;annoyingly&nbsp;arrived&nbsp;in the middle of the night.&nbsp;<\/p>\n\n\n\n<p>This&nbsp;isn&#8217;t&nbsp;a hypothetical scenario.&nbsp;It&#8217;s&nbsp;a real challenge&nbsp;that MCP servers face when implementing scheduling capabilities. The root cause? MCP servers&nbsp;don&#8217;t&nbsp;inherently know the current user&#8217;s date and time when tools are called.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding the root cause\u00a0<\/h2>\n\n\n\n<p>When an AI model calls an MCP tool, the server receives the request in isolation. No ambient context about the user&#8217;s current time,&nbsp;timezone,&nbsp;or locale&nbsp;accompanies&nbsp;the call.&nbsp;This lack of context is a subtle but significant obstacle for developers aiming to deliver a seamless user experience.&nbsp;<\/p>\n\n\n\n<p>When a user&nbsp;says&nbsp;&#8220;schedule in 2 hours,&#8221; the AI needs the server&#8217;s current time to calculate the target.&nbsp;But when they&nbsp;say&nbsp;&#8220;schedule for next Monday at 1 PM,&#8221; the AI needs both the user&#8217;s&nbsp;timezone&nbsp;and today&#8217;s day of the week. Information it simply&nbsp;doesn&#8217;t&nbsp;have.&nbsp;<\/p>\n\n\n\n<p>Server time and user time are fundamentally different. A server running in UTC&nbsp;doesn&#8217;t&nbsp;know the user&#8217;s local&nbsp;timezone. Day of week calculations require local context because &#8220;next Monday&#8221; means different things depending on what day it is today in the user&#8217;s&nbsp;timezone.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Example failure scenario&nbsp;<\/h3>\n\n\n\n<p>Consider this common case: a user in New York (EST, UTC-5) asks to &#8220;schedule a reminder for Monday at 1 PM.&#8221; The server runs in Frankfurt (UTC+1) or some cloud infrastructure on UTC. The message gets scheduled for the wrong Monday, wrong time,\u00a0or both.\u00a0<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Our solution: A two-tool approach<\/h2>\n\n\n\n<p>At Infobip, we propose a two-tool approach to scheduling that solves both relative and absolute scheduling&nbsp;mentioned above.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tool #1: Server time reference\u00a0<\/h2>\n\n\n\n<p>We&#8217;ve\u00a0introduced the\u00a0<code>get_current_server_utc_time<\/code>\u00a0tool, which provides a reliable temporal anchor for scheduling operations.\u00a0Here&#8217;s\u00a0the actual implementation:\u00a0<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@McpTool(name = &quot;get_current_server_utc_time&quot;, description = GET_CURRENT_UTC_TIME_DESCRIPTION)\npublic String getCurrentUtcTime() {\n    return getDatetimeFormat(ZonedDateTime.now(ZoneOffset.UTC));\n}<\/code><\/pre><\/div>\n\n\n\n<p>The tool returns the current UTC time in ISO 8601 format, such as: <code>2026-01-23T18:45:00.000+0000<\/code>. The magic\u00a0isn&#8217;t\u00a0just in the implementation.\u00a0It&#8217;s\u00a0in how we guide the AI to use the tool.\u00a0Here&#8217;s\u00a0our actual tool description:\u00a0<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>Returns the current UTC date and time. Use this whenever you need to\nschedule a message to be delivered\u00a0some time\u00a0in the future.\nFor example, if user asks you to schedule a message\nto be sent 2 hours from now, you should call this tool\nto obtain current date and time, add 2 hours to it,\nand use the new date and time when sending the message.\u00a0<\/code><\/pre><\/div>\n\n\n\n<p>Notice how the description explains what the tool does, specifies when to use it,&nbsp;and&nbsp;provides&nbsp;a concrete example. The description acts as inline documentation that guides the model&#8217;s&nbsp;behavior&nbsp;during tool selection and usage, and all of that with minimal overhead.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What this\u00a0doesn&#8217;t\u00a0solve<\/h3>\n\n\n\n<p>The tool&nbsp;doesn&#8217;t&nbsp;address absolute scheduling with day names like &#8220;next Monday at 1 PM.&#8221; It also&nbsp;can&#8217;t&nbsp;handle user&nbsp;timezone&nbsp;awareness. And&nbsp;so,&nbsp;calculating &#8220;next Monday&#8221; still requires knowing&nbsp;the&nbsp;today&#8217;s day of the week in the user&#8217;s&nbsp;timezone.&nbsp;Something&nbsp;that&nbsp;this tool&nbsp;doesn&#8217;t&nbsp;provide.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tool #2: User Context\u00a0<\/h2>\n\n\n\n<p>To address absolute scheduling and\u00a0timezone-aware requests,\u00a0we\u2019ve\u00a0introduced\u00a0a complementary tool:\u00a0<code>get_user_datetime_context<\/code>. This tool would return:\u00a0<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>{\n  &quot;datetime&quot;: &quot;2026-01-23T14:30:00-05:00&quot;,\n  &quot;timezone&quot;: &quot;UTC-05:00&quot;,\n  &quot;day_of_week&quot;: &quot;Thursday&quot;\n}<\/code><\/pre><\/div>\n\n\n\n<p>The tool&nbsp;enables absolute scheduling,&nbsp;timezone-aware&nbsp;calculations,&nbsp;and natural language date references,&nbsp;like &#8220;this weekend&#8221; or &#8220;next week.&#8221; The implementation is still straightforward and simple.&nbsp;<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@McpTool(name = &quot;get_user_datetime_context&quot;, description = GET_USER_DATETIME_CONTEXT_DESCRIPTION)\n    public UserDatetimeContext getUserDatetimeContext(\n            @McpToolParam(description = &quot;timezone&quot;) String timezone\n    ) {\n        var zoneId = getTimezone(timezone);\n        var zonedDateTime = ZonedDateTime.now(zoneId);\n\n        return new UserDatetimeContext(\n                getDatetimeFormat(zonedDateTime),\n                zonedDateTime.getOffset().toString(),\n                zonedDateTime.getDayOfWeek().toString()\n        );\n    }<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Implementation considerations\u00a0<\/h3>\n\n\n\n<p>You can implement this tool in several&nbsp;different&nbsp;ways.&nbsp;<\/p>\n\n\n\n<p><strong>Client-side implementation<\/strong> works well for apps where the MCP client can detect the user&#8217;s\u00a0timezone\u00a0automatically and provide context on the server&#8217;s behalf.\u00a0\u00a0<\/p>\n\n\n\n<p><strong>Server-side implementation<\/strong> with parameters means accepting\u00a0timezone\u00a0as an optional parameter from the user and storing it in their session or profile.\u00a0<\/p>\n\n\n\n<p>Or you could take a <strong>hybrid approach<\/strong>.\u00a0Default to\u00a0a\u00a0server-detected\u00a0timezone\u00a0(often UTC) but allow the client to override with an explicit\u00a0timezone\u00a0parameter.\u00a0<\/p>\n\n\n\n<p>The choice depends on your architecture and whether your MCP server has access to user session context or must infer it from requests.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What this solves<\/h3>\n\n\n\n<p>The&nbsp;tool handles absolute scheduling, but it can also work for relative scheduling.&nbsp;An&nbsp;LLM could request the current time using UTC as the&nbsp;timezone, but the tool description may steer it toward the dedicated server time tool instead.&nbsp;<\/p>\n\n\n\n<p>This is intentional. Simple, focused tool descriptions lead to more reliable tool&nbsp;selection. A single versatile tool with a complex description may seem elegant, but it often hurts LLM performance. Two specialized tools with clear use cases get the right answer&nbsp;almost&nbsp;100% of the time. The extra context overhead is negligible, but the improvement in user experience is significant.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Context window impact and\u00a0trade-offs<\/h2>\n\n\n\n<p>A common concern when adding tools is context window consumption.&nbsp;We&#8217;re&nbsp;going to&nbsp;analyze&nbsp;the real impact now, by examining the number of tokens consumed at each stage,&nbsp;tool description, tool call, and&nbsp;tool response.&nbsp;<\/p>\n\n\n\n<p>The analysis will break down these figures for each tool individually, followed by a combined total, so you can clearly see how their&nbsp;utilization&nbsp;affects the overall context window.&nbsp;<\/p>\n\n\n\n<p>To conduct the&nbsp;analysis,&nbsp;you&#8217;ll&nbsp;need two tools:&nbsp;<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>MCP Inspector to inspect our MCP server,\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Online tokenizer,\u00a0such as GPT Tokenizer\u00a0and ChatGPT tool calls\u00a0<\/li>\n<\/ol>\n\n\n\n<p>Now,&nbsp;let&#8217;s&nbsp;break down the impact of each tool. Tool output and tool input results were extracted from&nbsp;ChatGPTs&nbsp;GPT 5.2 model tool calls and verified using the online tokenizer.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Server time tool impact<\/h3>\n\n\n\n<p>Tool description: 74 tokens&nbsp;<\/p>\n\n\n\n<p>Tool input: 1 token&nbsp;<\/p>\n\n\n\n<p>Tool output: 21 tokens&nbsp;<\/p>\n\n\n\n<p>Total impact: 96 tokens&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">User context tool impact<\/h3>\n\n\n\n<p>Tool description: 139 tokens&nbsp;<\/p>\n\n\n\n<p>Tool input: 2 tokens&nbsp;<\/p>\n\n\n\n<p>Tool output: 42 tokens&nbsp;<\/p>\n\n\n\n<p>Total impact: 183 tokens&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Total impact\u00a0<\/h3>\n\n\n\n<p>When integrating AI tools into your workflow,&nbsp;it\u2019s&nbsp;crucial to consider how each tool affects your system\u2019s available context and overall efficiency.&nbsp;&nbsp;<\/p>\n\n\n\n<p>For us, with a combined impact of 279 tokens and modern models offering 200k+ context windows, this represents about 0.09% of available context.&nbsp;&nbsp;<\/p>\n\n\n\n<p>The model may do some thinking before&nbsp;making a decision&nbsp;which costs a little bit more, but in the grand scheme it is taking fewer tokens than&nbsp;the&nbsp;query.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">To Sum up<\/h2>\n\n\n\n<p>Time-aware scheduling in MCP servers&nbsp;isn&#8217;t&nbsp;a solved problem out of the box. Without explicit tooling, AI agents lack the temporal context they need to interpret user requests accurately, leading to frustrating&nbsp;misscheduled&nbsp;messages and confused users.&nbsp;<\/p>\n\n\n\n<p>The two-tool approach&nbsp;we&#8217;ve&nbsp;outlined addresses this gap pragmatically. The server time tool provides a reliable UTC anchor for relative scheduling, while the user context tool supplies the&nbsp;timezone&nbsp;and day-of-week information needed for absolute scheduling. Each tool has a focused purpose and a clear description, which helps LLMs select the right tool consistently.&nbsp;<\/p>\n\n\n\n<p>All this while keeping the context window cost to minimum.&nbsp;<\/p>\n\n\n\n<p>If&nbsp;you&#8217;re&nbsp;building MCP servers that handle any form of scheduling, consider implementing similar tools early in your design. The complexity is low, the integration is simple, and the alternative, debugging mysterious&nbsp;timezone&nbsp;bugs in production, is far more expensive.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Imagine your AI agent cheerfully accepts a request to [&hellip;]<\/p>\n","protected":false},"author":79,"featured_media":3785,"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,254],"tags":[309],"coauthors":[316],"class_list":["post-3775","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-engineering-practices","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>The invisible problem. How we solved scheduling with AI\u00a0 - 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\/the-invisible-problem-how-we-solved-scheduling-with-ai\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The invisible problem. How we solved scheduling with AI\u00a0 - Infobip Developers Hub\" \/>\n<meta property=\"og:description\" content=\"Imagine your AI agent cheerfully accepts a request to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai\" \/>\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=\"2026-02-05T12:54:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1629\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Filip Pankreti\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:site\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Filip Pankreti\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 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\/the-invisible-problem-how-we-solved-scheduling-with-ai#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai\"},\"author\":{\"name\":\"Filip Pankreti\u0107\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/1ce5c8c7490faf2c547ddcfd26b999a4\"},\"headline\":\"The invisible problem. How we solved scheduling with AI\u00a0\",\"datePublished\":\"2026-02-05T12:54:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai\"},\"wordCount\":1233,\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg\",\"keywords\":[\"MCP servers\"],\"articleSection\":[\"AI\",\"Engineering Practices\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai\",\"name\":\"The invisible problem. How we solved scheduling with AI\u00a0 - Infobip Developers Hub\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg\",\"datePublished\":\"2026-02-05T12:54:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg\",\"width\":2560,\"height\":1629,\"caption\":\"Original image: vectorelements-Nfz7YCRVSzY-unsplash.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.infobip.com\/developers\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The invisible problem. How we solved scheduling with AI\u00a0\"}]},{\"@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\/1ce5c8c7490faf2c547ddcfd26b999a4\",\"name\":\"Filip Pankreti\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/99933c94974b0d0c328811ee9ac701f3\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e71abd932e98596b1276650e4c5a950b13b4d10f03a268ed42149c61d51847f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e71abd932e98596b1276650e4c5a950b13b4d10f03a268ed42149c61d51847f?s=96&d=mm&r=g\",\"caption\":\"Filip Pankreti\u0107\"},\"description\":\"Filip is a Junior Software Engineer at Infobip, works on developing Infobip MCP servers and AI infrastructure.\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/author\/filip-pankretic\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The invisible problem. How we solved scheduling with AI\u00a0 - 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\/the-invisible-problem-how-we-solved-scheduling-with-ai","og_locale":"en_US","og_type":"article","og_title":"The invisible problem. How we solved scheduling with AI\u00a0 - Infobip Developers Hub","og_description":"Imagine your AI agent cheerfully accepts a request to [&hellip;]","og_url":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai","og_site_name":"Infobip Developers Hub","article_publisher":"https:\/\/www.facebook.com\/infobip\/","article_published_time":"2026-02-05T12:54:20+00:00","og_image":[{"width":2560,"height":1629,"url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Filip Pankreti\u0107","twitter_card":"summary_large_image","twitter_creator":"@InfobipDev","twitter_site":"@InfobipDev","twitter_misc":{"Written by":"Filip Pankreti\u0107","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#article","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai"},"author":{"name":"Filip Pankreti\u0107","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/1ce5c8c7490faf2c547ddcfd26b999a4"},"headline":"The invisible problem. How we solved scheduling with AI\u00a0","datePublished":"2026-02-05T12:54:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai"},"wordCount":1233,"publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg","keywords":["MCP servers"],"articleSection":["AI","Engineering Practices"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai","url":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai","name":"The invisible problem. How we solved scheduling with AI\u00a0 - Infobip Developers Hub","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg","datePublished":"2026-02-05T12:54:20+00:00","breadcrumb":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#primaryimage","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/02\/vectorelements-Nfz7YCRVSzY-unsplash-scaled.jpg","width":2560,"height":1629,"caption":"Original image: vectorelements-Nfz7YCRVSzY-unsplash.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-invisible-problem-how-we-solved-scheduling-with-ai#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.infobip.com\/developers\/"},{"@type":"ListItem","position":2,"name":"The invisible problem. How we solved scheduling with AI\u00a0"}]},{"@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\/1ce5c8c7490faf2c547ddcfd26b999a4","name":"Filip Pankreti\u0107","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/99933c94974b0d0c328811ee9ac701f3","url":"https:\/\/secure.gravatar.com\/avatar\/8e71abd932e98596b1276650e4c5a950b13b4d10f03a268ed42149c61d51847f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e71abd932e98596b1276650e4c5a950b13b4d10f03a268ed42149c61d51847f?s=96&d=mm&r=g","caption":"Filip Pankreti\u0107"},"description":"Filip is a Junior Software Engineer at Infobip, works on developing Infobip MCP servers and AI infrastructure.","url":"https:\/\/www.infobip.com\/developers\/blog\/author\/filip-pankretic"}]}},"_links":{"self":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3775","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\/79"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/comments?post=3775"}],"version-history":[{"count":8,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3775\/revisions"}],"predecessor-version":[{"id":3783,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3775\/revisions\/3783"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media\/3785"}],"wp:attachment":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media?parent=3775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/categories?post=3775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/tags?post=3775"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/coauthors?post=3775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}