Skip to content

inference example: update aigw for elasticon sg#101

Merged
anuraaga merged 4 commits intoelastic:mainfrom
codefromthecrypt:aigw-bump
Mar 16, 2026
Merged

inference example: update aigw for elasticon sg#101
anuraaga merged 4 commits intoelastic:mainfrom
codefromthecrypt:aigw-bump

Conversation

@codefromthecrypt
Copy link
Copy Markdown
Contributor

@codefromthecrypt codefromthecrypt commented Mar 11, 2026

tested locally and also against elastic cloud

kibana-trace

note I had to adjust for drift as kiwi syntax of date is different

Signed-off-by: Adrian Cole <adrian@tetrate.io>
Signed-off-by: Adrian Cole <adrian@tetrate.io>
Co-authored-by: Anuraag (Rag) Agrawal <anuraaga@gmail.com>
)

next_week = (datetime.now() + timedelta(weeks=1)).strftime("%Y-%m-%d")
# Small models can't convert between date formats that may be required by tools so this format needs to be precise
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fyi it was probably wrong to ever do YYY-MM-DD but anyway, since I looked up here it is. I think I just wasn't thinking when originally wrote this, and probably should have looked. but indeed LLMs should be able to figure this out!

$ npx @modelcontextprotocol/inspector --cli https://mcp.kiwi.com --transport http --method tools/list
{
  "tools": [
    {
      "name": "search-flight",
      "description": "\n# Search for a flight\n\n## Description\n\nUses the Kiwi API to search for available flights between two locations on a specific date.\n\n## How it works\n\nThe tool will:\n1. Search for matching locations to resolve airport codes\n2. Find available flights for the specified route and date range\n\n## Method\n\nCall this tool whenever a user wants to search for flights, regardless of whether they provided exact airport codes or just city names.\n\nYou should display the returned results in a markdown table format: Group the results by price (those who are the cheapest), duration (those who are the shortest, i.e. have the smallest 'totalDurationInSeconds') and the rest (those that could still be interesting).\n\nAlways display for each flight in order:\n  - In the 1st column: The departure and arrival airports, including layovers (e.g. \"Paris CDG → Barcelona BCN → Lisbon LIS\")\n  - In the 2nd column: The departure and arrival dates & times in the local timezones, and duration of the flight (e.g. \"03/08 06:05 → 09:30 (3h 25m)\", use 'durationInSeconds' to display the duration and not 'totalDurationInSeconds')\n  - In the 3rd column: The cabin class (e.g. \"Economy\")\n  - (In case of return flight only) In the 4th column: The return flight departure and arrival airports, including layovers (e.g. \"Paris CDG → Barcelona BCN → Lisbon LIS\")\n  - (In case of return flight only) In the 5th column: The return flight departure and arrival dates & times in the local timezones, and duration of the flight (e.g. \"03/08 06:05 → 09:30 (3h 25m)\", use 'return.durationInSeconds' to display the duration)\n  - (In case of return flight only) In the 6th column: The return flight cabin class (e.g. \"Economy\")\n  - In the previous-to-last column: The total price of the flight\n  - In the last column: The deep link to book the flight\n\nFinally, provide a summary highlighting the best prices, the shortest flights and a recommendation. End wishing a nice trip to the user with a short fun fact about the destination!\n",
      "inputSchema": {
        "type": "object",
        "properties": {
          "flyFrom": {
            "type": "string",
            "minLength": 1,
            "description": "Location to fly from: It could be a city or an airport name or code"
          },
          "flyTo": {
            "type": "string",
            "description": "Location to fly to: It could be a city or an airport name or code"
          },
          "departureDate": {
            "type": "string",
            "pattern": "^\\d{2}\\/\\d{2}\\/\\d{4}$",
            "description": "Departure date in dd/mm/yyyy format"
          },
          "departureDateFlexRange": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3,
            "default": 0,
            "description": "Departure date flexibility range in days (0 to 3 days before/after the selected departure date)"
          },
          "returnDate": {
            "type": "string",
            "pattern": "^\\d{2}\\/\\d{2}\\/\\d{4}$",
            "description": "Return date in dd/mm/yyyy format"
          },
          "returnDateFlexRange": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3,
            "default": 0,
            "description": "Return date flexibility range in days (0 to 3 days before/after the selected return date)"
          },
          "passengers": {
            "type": "object",
            "properties": {
              "adults": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9,
                "default": 1,
                "description": "Number of adults (over 12 years old included)"
              },
              "children": {
                "type": "integer",
                "minimum": 0,
                "maximum": 8,
                "default": 0,
                "description": "Number of children (from 3 to 11 years old included)"
              },
              "infants": {
                "type": "integer",
                "minimum": 0,
                "maximum": 4,
                "default": 0,
                "description": "Number of infants (under 2 years old)"
              }
            },
            "additionalProperties": false,
            "default": {
              "adults": 1,
              "children": 0,
              "infants": 0
            },
            "description": "Passengers details. The total number of passengers must be between 1 and 9. There must be at least one adult. There must be at least one adult per infant."
          },
          "cabinClass": {
            "type": "string",
            "enum": [
              "M",
              "W",
              "C",
              "F"
            ],
            "description": "Cabin class: M (economy), W (economy premium), C (business), F (first class)"
          },
          "sort": {
            "type": "string",
            "enum": [
              "price",
              "duration",
              "quality",
              "date"
            ],
            "default": "date",
            "description": "Sort results by: price, duration, quality or date (default: date)"
          },
          "curr": {
            "type": "string",
            "default": "EUR",
            "description": "Currency for response (examples: EUR, USD, GBP, JPY, CAD, AUD, NZD, CHF etc.)"
          },
          "locale": {
            "type": "string",
            "minLength": 2,
            "maxLength": 5,
            "default": "en",
            "description": "Language of city names and kiwi.com website links (examples: en, uk, de, fr, es, it, ru etc.)"
          }
        },
        "required": [
          "flyFrom",
          "flyTo",
          "departureDate"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "title": "Search for flights with Kiwi.com",
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "feedback-to-devs",
      "description": "Send feedback to the dev of the Kiwi MCP server.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "description": "The content of the feedback. Don't hesitate to include any text relevant to the issue (logs, error message) if you are having one."
          }
        },
        "required": [
          "text"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      },
      "annotations": {
        "title": "Send feedback to the devs of the Kiwi.com MCP server",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    }
  ]

Signed-off-by: Adrian Cole <adrian@tetrate.io>
@anuraaga
Copy link
Copy Markdown
Collaborator

Link check failure unrelated

@anuraaga anuraaga merged commit a7e1e7f into elastic:main Mar 16, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants