teckel: AI/MCP Services

teckel publishes and maintains a suite of “teckel Toolkits” designed to extend the utility of LLMs and AI Agents via MCP server plugins: each teckel Toolkit is an MCP server endpoint, accessible via the standard MCP protocols. These protocols are supported by a growing number of LLM/AI/Agentic vendors. For maximum utility, the Toolkits can also be called via standard RESTful API (POST) calls, enabling them to be used in any application, not just LLM/AI/Agents.

Access to the teckel Toolkit MCP/API endpoints is protected by API keys which are allocated to the developers’ Ethereum addresses. Developers can manage their API keys via the teckel App. Developers pay for API usage on a pay-as-you-go basis via teckel credits (tc) which can be purchased via the teckel App.

teckel hosts its MCP/API servers in private data centers located in Western Europe, i.e., they are “off-cloud”.

teckel Toolkits

The following Toolkits are currently available (also, on GitHub):

teckel Ethereum Toolkit

This Toolkit provides access to a subset of the teckel web3 Ethereum JSON-RPC services—namely those that require read only access to the blockchain. (For full access to the Ethereum blockchain including transaction execution and smart contract interaction, use the full teckel web3 services JSON-RPC API.)

The main purpose of the Ethereum Toolkit is to give LLM/AI/Agents real-time access to Ethereum blockchain basic information. Once connected to an LLM via your MCP-client-of-choice, the LLM can use the suite of tools in the Toolkit to provide answers to prompts such as:

“What is the current Ethereum price in USD on the mainnet and the sepolia testnet?”

“What is the current Ethereum gas price on the mainnet and the sepolia testnet?”

“What is the balance of my Ethereum Account on the mainnet and the sepolia testnet?”

“What transactions have been processed in the latest block on the mainnet and the sepolia testnet?”

teckel Navigation Toolkit

The main purpose of the Navigation Toolkit is to give LLM/AI/Agents the ability to provide accurate navigation information. There are three main application areas (all can be combined):

 

Time and Place

  • Accurate determination of local time and sun position at any place in the world, taking into account time zones and daylight savings corrections.

  • LLM prompt examples using these tools:

“How many hours of daylight will there be on the Isle of Man on June 15th this year?”

“What time is it in Hong Kong right now, and what are the light conditions (daylight, twilight, or darkness)?”

“What time is sunrise and sunset in Hamburg, Germany tomorrow?”

“My flight is departing for San Francisco from London at 3 hours from now. The flight will take ten hours. What time will it be when I arrive in San Francisco, and what will the lighting conditions be?”

Roadtrips

  • Accurate determination of driving distances and times anywhere in the world, taking into account current traffic (and allowing for ferry trip times if water crossing required). Computation of latitude and longitude for any place specified by address, postal code, name, landmark, etc. Search for hotels, restaurants, or any other typical feature, within a specified range of any location.

  • LLM prompt examples using these tools:

“What is the distance, and how long will it take, to drive from Joshua Tree to Oakland CA?”

“Find me 10 hotels within 20 miles of Prestwick Airport, UK”

“What is the latitude and longitude of UK postcode IM4 7BN?”

“If I drive from Berlin to Munich tomorrow, departing at 9am local time, will it be dark when I arrive?”

General Aviation

  • Accurate computation of distances between points on Earth using the World Geodetic System 1984 (WGS84), the geodetic reference system that defines the Earth’s shape and size as an oblate spheroid, the standard for the Global Positioning System (GPS). The distances can be computed either as great-circles (i.e., shortest distance between the two points) or rhumblines (i.e., the distance measured along a straight line drawn on a mercator projection map).

  • Accurate computation of the end-point for a given start-point, bearing, and range. The bearing can be referenced to either true or magnetic north (if magnetic, the magnetic variation is automatically calculated and corrected for), and the track can be specified as a great circle or rhumbline.

  • Search for airports within a specified range from any location in the world, with multiple optional filters (such as “must have AVGAS” etc). For the US only, can also search for navaids, fixes, features, and obstacles.

  • Obtain the latest aviation weather report (METAR) and forecast (TAF) for any worldwide ICAO designated weather station (in raw and decoded formats). Find the nearest ICAO designated weather station to a given location, or multiple stations within a specified range of that location.

  • Computation of aviation-pertinent atmospheric parameters (versus altitude) given the measured temperature and pressure (from METARs).

  • Perform VFR (Visual-Flight-Rules) flight route calculations between specified origin and destination airfields, plus up to ten optional intermediate waypoints (when not routing direct). Automatically computes wind corrections (using latest METARs along the route, and assuming a power-law extrapolation from METAR measured winds at 10m AGL to wind aloft), magnetic variation, and sunlight conditions (e.g., if daylight, twilight, or night-time at each waypoint plus direction (azimuth and zenith) to the sun relative to flight track (to assess if glare will be an issue). For the origin and departure airfields, gives essential information for each runway (surface, dimensions) plus the crosswind and headwind/tailwind components (computed from latest METARs), plus, where the information is available, details on runway lighting, visual approach aids, and instrument approach aids. Also provides the communication frequencies for the origin and departure airfields, plus where the information is available, telephone contact details, operating hours, and whether PPR is required. Utilizes current atmospheric conditions (from latest METAR data) to model the atmosphere (and its deviations from the International Standard Atmosphere) in order to compute for example, density altitude at the departure airfield, true airspeed (TAS), Mach number, and estimated cloud-base and freezing altitude along the route, and pressure altitude at each waypoint (i.e., the altitude displayed on the altimeter when set at standard pressure setting, useful for flight level determination). All navigation timings are presented in UTC as well as in local time (taking account of timezone and Daylight-Savings corrections). As well as providing a route summary (total distance, flight time, fuel consumption), all relevant data is provided per leg to facilitate the generation of a navlog (e.g., groundspeed, distance, timings, magnetic heading and true track, fuel used, etc). Aircraft Performance and route profile data (indicated airspeed, altitude, fuel flow rate) can be specified or default values (100kts, 2500ft 8 USgal/hour) are used if omitted. The latest METAR (current weather) and TAF (forecasts) reports are provided for each waypoint. A URL is also provided which enables the route to be viewed on skyvector.com (via any web browser). From there, the route can be exported to popular pilot apps such as Garmin Pilot, ForeFlight etc.

  • LLM prompt examples using these tools:

“What is the great-circle distance between Prestwick Airport and Goodwood Airfield in the UK?”

“What is the latitude and longitude of the location 25 nautical miles on a true bearing of 335 degrees from EGNS?”

 “What is the latitude and longitude of the location 45 nautical miles on a magnetic bearing of 85 degrees from the Daventry VOR (DTY) in the UK?”

“What is the nearest METAR report for Wolverhampton Airport, UK?”

“Perform the flight route calculations for a VFR flight from Wolverhampton Airport, UK, to EGTK, with intermediate waypoint 15 nautical miles on a magnetic bearing of 210 degrees from Wolverhampton. Indicated airspeed will be 95 kts, altitude 2000 ft, departing Wolverhampton 45 minutes from now. Provide details for the navlog, plus a skyvector URL.”

Then,

“How long is the drive from EGTK to Chipping Norton?”

“Perform the flight route calculations for a VFR flight from Palo Alto Airport, CA, to Half Moon Bay airport, CA, with an intermediate waypoint overflying Stanford University. Indicated airspeed will be 100 kts, altitude 3000 ft, departing Palo Alto two hours from now. Provide details for the navlog, plus a skyvector URL.”

Then,

“Are there any Mexican restaurants within 10 miles of Half Moon Bay airport?”

In the following two examples note that any overwater routes are constrained.

An example of a more complex planning request and the resultant output via PDF file:

Please provide a VFR flight plan departing Liverpool this week with final destination of Dublin. Please ensure all waypoints have AVGAS available and supply 3 overnight accommodations at each waypoint within a 5 mile radius of the waypoint. Please ensure no over water crossings greater than 50 nautical miles. Aircraft is a small single engine Cessna. Please keep maximum flight ceiling below 8000ft. Please ensure a minimum of 1 hour of daylight upon landing at each waypoint and final destination. Please provide the best flight itinerary to minimize flight times and total travel duration. Please check weather conditions enroute to safely accommodate flight restrictions. I must arrive in Dublin no later than 2pm on Dec 31st. Please also provide a skyvector url.”

Here is the corresponding output: example PDF transcript.

 

Another example of a more complex planning request and the resultant output via PDF file:

Please create a VFR only flight plan for a small Cessna with a 300nm range only landing at airports with AVGAS departing tomorrow morning from Yucca Valley CA with final destination of MIA. Avoid any over water routes greater than 50nm. Maximum ceiling is 9000ft. Require at least 1 hr of sunlight left in the day upon landing at any waypoint including the Destination. List at least 3 available lodging accommodations within a 5 mile radius of any waypoint. Include a detailed itinerary to minimize total travel time. Include a skyvector url.”

Here is the corresponding output: example PDF transcript.

 

For a more in-depth and historical discussion of the teckel Navigation Toolkit, please see this blog article.

How to Use the teckel Toolkits

First generate an API key using the teckel App.

Do the following:

To use the teckel Ethereum endpoint API, do the following:

1. Install the teckel App (or teckel App Store Edition) and create (or import) an Ethereum Account.

2. Navigate to the Accounts page by tapping on the wallet icon in the upper right corner of the App home screen. Access the API Key Manager for the created or imported Ethereum Account by tapping “Manage API Key” on the Accounts page as seen below.

3. Use the API key when making calls to the endpoints. All the available endpoints are available via the teckel App, incorporating the actual API key for the given Ethereum Account. Navigate to Get API Key in the API Key Manager as seen below.

Ethereum Account Admin
teckel Ethereum Account Admin
API Key Manager

4. For illustrative purposes, we will use the following fake key d1e12345-c234-45a6-9b76-1234567891ff in the examples presented below. You would substitute your actual API key in place of this fake key.

Next, decide if you are using the MCP servers or RESTful (API) to access the tools.

Using the MCP Servers

Configure your MCP client-of-choice

Whatever the client, the configuration is essentially the same. Namely, provide the client with the MCP server endpoint and access credentials. These are typically in the form of a configuration JSON snippet, using your API key as the “Bearer” token in the “Authorization” tag. For example, here is the precise configuration for use with the Cursor desktop app (navigate within the Cursor app to the Cursor Settings -> Tools & MCP -> + New MCP server and enter these details using your actual teckel API key to replace this fake one).

MCP JSON configuration (example for use with Cursor)

content_copy check

MCP JSON Snippet:

{
 "mcpServers": {
    "teckel-ethereum-toolkit": {
      "url": "https://mcp-servers.bh.tkllabs.io:9780/ethereum-mcp",
      "headers": {
        "Authorization": "Bearer d1e12345-c234-45a6-9b76-1234567891ff"
      }
    },
    "teckel-navigation-toolkit": {
      "url": "https://mcp-servers.bh.tkllabs.io:9780/navigation-mcp",
      "headers": {
        "Authorization": "Bearer d1e12345-c234-45a6-9b76-1234567891ff"
      }
    }   
  }
}

NOTE: This configuration assumes the HTTP(streamable) protocol. If your client requires the older (now legacy) SSE protocol, replace “ethereum-mcp” with “ethereum-sse” and “navigation-mcp” with “navigation-sse”, respectively.

MCP JSON Configuration (example for use with n8n)

Similarly, for use with n8n, below is the JSON code snippet for a sample workflow which accesses the teckel Ethereum and Navigation Toolkit MCP servers. (Save this entire snippet to a .json file; then import the file to your n8n workflow.) You will need to replace the credentials with your own “Bearer Auth” credential within n8n (using your teckel API key as the “Bearer token”). NOTE: In the below snippet, the magenta font pertains to the actual teckel MCP Servers, the rest is the supporting workflow infrastructure for testing the MCP servers.

content_copy check

n8n JSON Snippet:

{
  "name": "Teckel Tools MCP Example",
  "nodes": [
    {
      "parameters": {
        "endpointUrl": "https://mcp-servers.bh.tkllabs.io:9780/ethereum-mcp",
        "authentication": "bearerAuth",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1.2,
      "position": [
        -16,
        640
      ],
      "id": "569bf922-b8cb-40a0-beb8-2da890dab925",
      "name": "Teckel Tools MCP server: ethereum",
      "credentials": {
        "httpBearerAuth": {
          "id": "zPHt516IS5uuS2S5",
          "name": "TECKEL APIKEY"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-5",
          "mode": "list",
          "cachedResultName": "GPT-5"
        },
        "messages": {
          "values": [
            {
              "content": "Perform a VFR flight route calculation from EGNS to EGPK, departing 60 minutes from now. Include an intermediate waypoint on magnetic bearing 320 degrees at 20 nm from EGNS, followed by another on true bearing 355 for 15 nm from the previous waypoint.\n"
            }
          ]
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        -496,
        368
      ],
      "id": "5c9a94cd-71a4-4d77-84f5-664ef14871af",
      "name": "Message a model",
      "credentials": {
        "openAiApi": {
          "id": "EvoF3L2GoYTtESR3",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "endpointUrl": "https://mcp-servers.bh.tkllabs.io:9780/navigation-mcp",
        "authentication": "bearerAuth",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1.2,
      "position": [
        192,
        640
      ],
      "id": "016dae90-92b4-4eed-9120-f8531bafbd10",
      "name": "Teckel Tools MCP server: navigation",
      "credentials": {
        "httpBearerAuth": {
          "id": "zPHt516IS5uuS2S5",
          "name": "TECKEL APIKEY"
        }
      }
    }
  ],
  "pinData": {},
  "connections": {
    "Teckel Tools MCP server: ethereum": {
      "ai_tool": [
        [
          {
            "node": "Message a model",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Teckel Tools MCP server: navigation": {
      "ai_tool": [
        [
          {
            "node": "Message a model",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "626e0784-a43b-4857-bf54-91e7f1c32c59",
  "meta": {
    "templateId": "self-building-ai-agent",
    "templateCredsSetupCompleted": true,
    "instanceId": "3c7702199c1f42229c256ae3782d70f8576bc5028e557d0903826477f97e032b"
  },
  "id": "rAm1XjSle8lYmOcT",
  "tags": []
}

Using the RESTful API Servers

The benefit of using the MCP servers is that the connected LLMs can parse the natural language in the user prompts, populate the required parameters for calling the toolkit API functions, then likewise unravel the returned JSON structure into natural language for presentation to the user. However, if you wish to utilise the teckel Toolkits at a lower level (e.g., in your own app), you can call the functions directly using the RESTful (POST) API protocols. You are then responsible for populating the input parameters, and handling the returned JSON output.

The base API URL endpoint is identical to the MCP server endpoint:

content_copy check

API URL Endpoint:

https://mcp-servers.bh.tkllabs.io:9780/

The desired function name must be appended to this URL, and the function arguments must be added as query-string parameters. The teckel API key must be added as a Bearer Token in the Authorization header. The POST protocol must be used (rather than GET), but the body can be empty since the parameters are passed in the query-string.  Below is an example curl request for calling the eth_gasPrice method in the Ethereum Toolkit with the required network parameter:

content_copy check

Curl Request:

curl -X POST \   'https://mcp-servers.bh.tkllabs.io:9780/eth_gasPrice?network=mainnet' \
  -H 'Authorization: Bearer d1e12345-c234-45a6-9b76-1234567891ff' \
  -H 'Content-Type: application/json'

JSON Response:

{"gas_price":465912773}

Another example, calling the perform_sun_calculations from the Navigation Toolkit:

content_copy check

Curl Request:

curl -X POST \   'https://mcp-servers.bh.tkllabs.io:9780/perform_sun_calculations?latitude=54&longitude=-4.4861228&altitudeMetres=100&dateTimeUTCstr=25-Oct-2025%2014:18:39' \
  -H 'Authorization: Bearer d1e12345-c234-45a6-9b76-1234567891ff' \
  -H 'Content-Type: application/json'

JSON Response:

{"results":{"sunElevation":17.66329058182842,"sunAzimuth":215.1455213675287,"sunriseUTC":"25-Oct-2025 07:04:51","sunriseAzimuth":109.78189990283305,"sunsetUTC":"25-Oct-2025 16:58:17","sunsetAzimuth":249.96470561181022,"middayUTC":"25-Oct-2025 12:01:38","middaySunElevation":23.75305488041259,"daylightHours":"09:53:26"}}

Tools Listing

The tools available in each teckel Toolkit are summarised in the tables below.

Ethereum Toolkit Tools

All functions in this Toolkit must be “awaited” by the client in order to retrieve the results from the request response, i.e., they are not “fire-and-forget”. Accordingly, the client timeouts must be adjusted to allow for the required response times.

Name & Description (for MCP clients) Un­der­ly­ing method (for REST­ful API calls) Parameters
ethereumPriceSummary
Get the current ETH-USD price, plus the current gas prices for the ethereum mainnet and sepolia testnet
get_ethereum_price_summary
eth_gasPrice
Returns the current gas price (in Wei) on the ethereum mainnet or sepolia testnet. Wraps the eth_gasPrice method from the standard ethereum json-rpc library
eth_gasPrice
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)
net_peerCount
Returns the peer count on the ethereum execution client node (the given node can be specified in the request header)
net_peerCount
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)
eth_getUncleCountByBlockNumber
Returns the number of uncles in a block from a block matching the given block number. Wraps the eth_getUncleCountByBlockNumber method from the standard ethereum json-rpc library
eth_getUncleCountByBlockNumber
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

block
Specify the integer block number (as an integer, will be automatically converted to a hex string), or one of 'latest', 'earliest', 'pending', 'safe', 'finalized'
eth_blockNumber
Returns the number of most recent block. Wraps the eth_blockNumber method from the standard ethereum json-rpc library
eth_blockNumber
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)
eth_getTransactionByBlockHashAndIndex
Returns information about a transaction by block hash and transaction index position. Wraps the eth_getTransactionByBlockHashAndIndex method from the standard ethereum json-rpc library
eth_getTransactionByBlockHashAndIndex
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

block_hash
Specify the block hash

index
Specify the index (as an integer, will be automatically converted to a hex string)
eth_getTransactionByHash
Returns the information about a transaction requested by transaction hash. Wraps the eth_getTransactionByHash method from the standard ethereum json-rpc library
eth_getTransactionByHash
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

hash
Specify the transaction hash
eth_getBalance
Returns the balance of the account of given address. Wraps the eth_getBalance method from the standard ethereum json-rpc library
eth_getBalance
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

address
Specify the ethereum address

block
Specify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized'
eth_call
Executes a new message call immediately without creating a transaction on the blockchain. Wraps the eth_call method from the standard ethereum json-rpc library
eth_call
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

address
Specify the ethereum address

data
Specify the calldata hex string

block
Specify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized'
eth_getCode
eth_getCode
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

address
Specify the ethereum address of the function

block
Specify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized'
eth_getTransactionByBlockNumberAndIndex
Returns information about a transaction by block number and transaction index position. Wraps the eth_getTransactionByBlockNumberAndIndex method from the standard ethereum json-rpc library
eth_getTransactionByBlockNumberAndIndex
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

block
Specify the integer block number (as an integer, will be automatically converted to a hex string), or one of 'latest', 'earliest', 'pending', 'safe', 'finalized'

index
Specify the index (as an integer, will be automatically converted to a hex string)
eth_getBlockTransactionCountByHash
Returns the number of transactions in a block from a block matching the given block hash. Wraps the eth_getBlockTransactionCountByHash method from the standard ethereum json-rpc library
eth_getBlockTransactionCountByHash
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)
eth_getTransactionByBlockHashAndIndex
Returns information about a transaction by block hash and transaction index position. Wraps the eth_getTransactionByBlockHashAndIndex method from the standard ethereum json-rpc library
eth_getTransactionByBlockHashAndIndex
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

block_hash
Specify the block hash

index
Specify the index (as an integer, will be automatically converted to a hex string)
eth_getTransactionReceipt
Returns the receipt of a transaction by transaction hash. Wraps the eth_getTransactionReceipt method from the standard ethereum json-rpc library
eth_getTransactionReceipt
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

hash
Specify the transaction hash
eth_getBlockByHash
Returns information about a block by hash. Wraps the eth_getBlockByHash method from the standard ethereum json-rpc library
eth_getBlockByHash
network
Specify the network 'mainnet

is_full
Specify whether to fetch the full block. If false, will only fetch the header and the list of transaction hashes
eth_getTransactionCount
Returns the number of transactions sent from an address. Wraps the eth_getTransactionCount method from the standard ethereum json-rpc library
eth_getTransactionCount
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

address
Specify the ethereum address

block
Specify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized'
eth_getBlockReceipts
Returns the receipts of a block by hash. Wraps the eth_getBlockReceipts method from the standard ethereum json-rpc library
eth_getBlockReceipts
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)
eth_getStorageAt
Returns the value from a storage position at a given address. Wraps the eth_getStorageAt method from the standard ethereum json-rpc library
eth_getStorageAt
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

address
Specify the ethereum address

index
Specify the index (as an integer, will be automatically converted to a hex string)

block
Specify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized'
eth_getTransactionByHash
Returns the information about a transaction requested by transaction hash. Wraps the eth_getTransactionByHash method from the standard ethereum json-rpc library
eth_getTransactionByHash
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

hash
Specify the transaction hash
eth_chainId
Returns the chain ID used for signing replay-protected transactions. Wraps the eth_chainId method from the standard ethereum json-rpc library
eth_chainId
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)
eth_getBlockByNumber
Returns information about a block by hash. Wraps the eth_getBlockByNumber method from the standard ethereum json-rpc library
eth_getBlockByNumber
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

block
Specify the integer block number (as an integer, will be automatically converted to a hex string), or one of 'latest', 'earliest', 'pending', 'safe', 'finalized'

is_full
Specify whether to fetch the full block. If false, will only fetch the header and the list of transaction hashes
eth_getBlockTransactionCountByNumber
Returns the number of transactions in a block matching the given block number. Wraps the eth_getBlockTransactionCountByNumber method from the standard ethereum json-rpc library
eth_getBlockTransactionCountByNumber
network
Specify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)

Navigation Toolkit Tools

All functions in this Toolkit must be “awaited” by the client in order to retrieve the results from the request response, i.e., they are not “fire-and-forget”. Accordingly, the client timeouts must be adjusted to allow for the required response times.

Name & Description (for MCP clients) Un­der­ly­ing method (for REST­ful API calls) Parameters
get_metars
Get the current aviation weather report (METAR) for any airport(s) or weather station(s) in the world, designated by their four letter ICAO codes (e.g. EGPF for Glasgow, UK). Data provided by the US National Weather Service (NOAA).
get_metars
airports_icao_csv
Comma-separated (with no spaces) list of airport (or weather station) ICAO codes (e.g., EGPF,KLAX)
get_nearest_METAR_for_coords
Get the nearest aviation weather METAR report for the specified location coordinates (latitude, longitude). Global coverage. Data provided by the US National Weather Service (NOAA).
get_nearest_METAR_for_coords
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228
get_nearest_METAR_for_place
Get the nearest aviation weather METAR report for the specified place. Global coverage. Data provided by the US National Weather Service (NOAA).
get_nearest_METAR_for_place
search_address
Place to search. Can be any address, postcode etc. Global coverage.
get_METARS_for_coords_within_range
Get the aviation weather METAR reports for the specified location coordinates (latitude, longitude) from all weather stations within specified range. Global coverage. Data provided by the US National Weather Service (NOAA).
get_METARS_for_coords_range
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228

rangeNm
Desired range in nautical miles
get_METARS_for_place_within_range
Get the aviation weather METAR reports for the specified place from all weather stations within specified range. Global coverage. Data provided by the US National Weather Service (NOAA).
get_METARS_for_place_range
search_address
Address to search. Can be any named place, landmark, address, postcode etc. Global coverage.

rangeNm
Desired range in nautical miles
get_tafs
Get the aviation weather forecast (TAF) for any airport(s) or weather stations in the world, designated by their four letter ICAO codes (e.g. EGPF for Glasgow, UK). Data provided by the US National Weather Service (NOAA).
get_tafs
airports_icao_csv
Comma-separated (with no spaces) list of airport (or weather station) ICAO codes (e.g., EGPF,KLAX)
get_airports_for_coords_within_range
Get airports within specified range from specified location coordinates (latitude, longitude). Global coverage. Data provided by the US National Weather Service (NOAA).
get_airports_for_coords_range
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228

rangeNm
Desired range in nautical miles
get_navaids_for_coords_within_range
Get aviation navaids within specified range from specified location coordinates (latitude, longitude). US only. Data provided by the US National Weather Service (NOAA).
get_navaids_for_coords_within_range
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228

rangeNm
Desired range in nautical miles
get_fixes_for_coords_within_range
Get aviation fixes/waypoints within specified range from specified location coordinates (latitude, longitude). US only. Data provided by the US National Weather Service (NOAA).
get_fixes_for_coords_range
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228

rangeNm
Desired range in nautical miles
get_features_for_coords_within_range
Get aviation features within specified range from specified location coordinates (latitude, longitude). US only. Data provided by the US National Weather Service (NOAA).
get_features_for_coords_range
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228

rangeNm
Desired range in nautical miles
get_obstacles_for_coords_within_range
Get aviation obstacles within specified range from specified location coordinates (latitude, longitude). US only. Data provided by the US National Weather Service (NOAA).
get_obstacles_for_coords_range
latitude
Latitude (decimal degrees, positive North) of specified location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of specified location e.g., -4.4861228

rangeNm
Desired range in nautical miles
geocode_search
Perform a Google geocode search to obtain the geographical coordinates for any specified global location.
perform_google_geocode_search
search_address
Address to search. Can be any named place, landmark, address, postcode etc. Global coverage.
nearest_search
Perform a Google search for the nearest objects (as provided, e.g., ‘restaurant’) within a circle centred on the provided geographical coordinates (global coverage) and with radius equal to the provided range.
perform_google_nearest_places_search
objects_to_search_for
Comma-separated list of objects to search for, e.g., hotels, restaurants

centre_latitude
Latitude (decimal degrees, positive North) of centre of search circle

centre_longitude
Longitude (decimal degrees, positive East) of centre of search circle

radial_range_metres
Radius, in metres, of search circle

max_result_count
Maximum number of results to be returned
place_details
Get details for the place with place_id returned from calling the nearest_search tool.
get_google_place_details
place_id
The place_id returned from calling the nearest_search tool
airport_search
Perform a search for an airport by name, ICAO code, IATA code or alternate identifier, plus other optional filters. Useful for finding ICAO code for given airport name. Data provided by OpenAIP (https://www.openaip.net)
perform_openaip_airport_search
search_string
Can be name, ICAO code, IATA code or alternate identifier

airport_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Airport (civil/military), 1 for Glider Site, 2 for Airfield Civil, 3 for International Airport, 4 for Heliport Military, 5 for Military Aerodrome, 6 for Ultra Light Flying Site, 7 for Heliport Civil, 8 for Aerodrome Closed, 9 for Airport resp. Airfield IFR, 10 for Airfield Water, 11 for Landing Strip, 12 for Agricultural Landing Strip, 13 for Altiport

traffic_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for VFR or 1 for IFR

ppr_flag
Leave blank or 0, or specify 1 for ppr required

private_flag
Leave blank or 0, or specify 1 for private airfields only

fuel_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Super PLUS, 1 for AVGAS, 2 for JET A, 3 for JET A1, 4 for JET B, 5 for Diesel, 6 for AVGAS UL91

handling_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Cargo Handling, 1 for De-Icing, 2 for Maintenance, 3 for Security, 4 for Shelter

services_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Bank Office, 1 for Post Office, 2 for Customs, 3 for Lodging, 4 for Medical Facility, 5 for Restaurant, 6 for Sanitation, 7 for Transportation, 8 for Laundry Service, 9 for Camping
airport_search_from_coordinates
Perform a search for airports within specified range from a location specified by coordinates, plus other optional filters. Useful, for example, for finding ICAO code for given airport latitude & longitude. Data provided by OpenAIP (https://www.openaip.net)
perform_openaip_airport_search_coords
latitude
Latitude (decimal degrees, positive North) of search location

longitude
Longitude (decimal degrees, positive East) of search location

distanceNm
Search limit range (in nautical miles)

airport_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Airport (civil/military), 1 for Glider Site, 2 for Airfield Civil, 3 for International Airport, 4 for Heliport Military, 5 for Military Aerodrome, 6 for Ultra Light Flying Site, 7 for Heliport Civil, 8 for Aerodrome Closed, 9 for Airport resp. Airfield IFR, 10 for Airfield Water, 11 for Landing Strip, 12 for Agricultural Landing Strip, 13 for Altiport

traffic_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for VFR or 1 for IFR

ppr_flag
Leave blank or 0, or specify 1 for ppr required

private_flag
Leave blank or 0, or specify 1 for private airfields only

fuel_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Super PLUS, 1 for AVGAS, 2 for JET A, 3 for JET A1, 4 for JET B, 5 for Diesel, 6 for AVGAS UL91

handling_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Cargo Handling, 1 for De-Icing, 2 for Maintenance, 3 for Security, 4 for Shelter

services_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Bank Office, 1 for Post Office, 2 for Customs, 3 for Lodging, 4 for Medical Facility, 5 for Restaurant, 6 for Sanitation, 7 for Transportation, 8 for Laundry Service, 9 for Camping
airport_search_from_place
Perform a search for airports within specified range from a specified place, plus other optional filters. Data provided by OpenAIP (https://www.openaip.net)
perform_openaip_airport_search_place
search_string
Can be name, ICAO code, IATA code or alternate identifier

distanceNm
Search limit range (in nautical miles)

airport_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Airport (civil/military), 1 for Glider Site, 2 for Airfield Civil, 3 for International Airport, 4 for Heliport Military, 5 for Military Aerodrome, 6 for Ultra Light Flying Site, 7 for Heliport Civil, 8 for Aerodrome Closed, 9 for Airport resp. Airfield IFR, 10 for Airfield Water, 11 for Landing Strip, 12 for Agricultural Landing Strip, 13 for Altiport

traffic_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for VFR or 1 for IFR

ppr_flag
Leave blank or 0, or specify 1 for ppr required

private_flag
Leave blank or 0, or specify 1 for private airfields only

fuel_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Super PLUS, 1 for AVGAS, 2 for JET A, 3 for JET A1, 4 for JET B, 5 for Diesel, 6 for AVGAS UL91

handling_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Cargo Handling, 1 for De-Icing, 2 for Maintenance, 3 for Security, 4 for Shelter

services_type
Leave blank or specify a single integer or a comma-separated (with no spaces) list of integer values (“or” filters) from the following: 0 for Bank Office, 1 for Post Office, 2 for Customs, 3 for Lodging, 4 for Medical Facility, 5 for Restaurant, 6 for Sanitation, 7 for Transportation, 8 for Laundry Service, 9 for Camping
current_time_at_coordinate_location
Get the current time (UTC) plus the local time (accounting for timezone and daylight-savings offsets), as well as the sunrise (UTC), sunset (UTC), and current sun elevation (angle above horizon) and the corresponding light conditions (daylight, darkness, twilight) for the specified location (latitude, longitude).
get_current_time_at_location_coords
latitude
Latitude (decimal degrees, positive North) of observer location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of observer location e.g., -4.4861228
current_time_at_place
Get the current time (UTC) plus the local time (accounting for timezone and daylight-savings offsets), as well as the sunrise (UTC), sunset (UTC), and current sun elevation (angle above horizon) and the corresponding light conditions (daylight, darkness, twilight) for the specified place.
get_current_time_at_place
search_address
Address to search. Can be any named place, landmark, address, postcode etc. Global coverage.
later_time_at_coordinate_location
Get the time (UTC) plus the local time (accounting for timezone and daylight-savings offsets), a specified number of hours from now, as well as the sunrise (UTC), sunset (UTC), and the sun elevation (angle above horizon) and the corresponding light conditions (daylight, darkness, twilight) for the specified location (latitude, longitude).
get_later_time_at_location_coords
latitude
Latitude (decimal degrees, positive North) of observer location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of observer location e.g., -4.4861228

hours_later
Hours from now for the time calculations (e.g., specify 7 for determining the local time at destination after a 7 hour flight)
later_time_at_place
Get the time (UTC) plus the local time (accounting for timezone and daylight-savings offsets), a specified number of hours from now, as well as the sunrise (UTC), sunset (UTC), and the sun elevation (angle above horizon) and the corresponding light conditions (daylight, darkness, twilight) for the specified place.
get_later_time_at_place
search_address
Address to search. Can be any named place, landmark, address, postcode etc. Global coverage.

hours_later
Hours from now for the time calculations (e.g., specify 7 for determining the local time at destination after a 7 hour flight)
nav_bounding_box
Get the corner coordinates (latitude and longitude) of a rectangular bounding box (with specified width and height), centred on the specified location. Great-circle arclengths are assumed.
get_nav_bounding_box
centreLat
Latitude (decimal degrees, positive North) of centre location e.g., 54.1523372

centreLon
Longitude (decimal degrees, positive East) of centre location e.g., -4.4861228

boxWidthNm
Bounding box width (East-West extent) in nautical miles

boxHeightNm
Bounding box height (North-South extent) in nautical miles
sun_calculations
Get the sun position (elevation angle above the horizon, plus horizontal direction (azimuth)) in the sky for an observer at specified location (including altitude) and time, as well as the sunrise (UTC), sunset (UTC), daylight hours, precise time of midday (UTC), and sun elevation at midday. Note: midday would only be precisely at local noon if the location is on the very edge of its timezone.
perform_sun_calculations
latitude
Latitude (decimal degrees, positive North) of observer location e.g., 54.1523372

longitude
Longitude (decimal degrees, positive East) of observer location e.g., -4.4861228

altitudeMetres
Altitude (metres) above Mean Sea Level (MSL) of observer location

dateTimeUTCstr
Date and time (UTC) of observation e.g., 25-Oct-2025 14:18:39
nav_bearing_from_coords
Get the coordinates (latitude and longitude) of the endpoint at distance (range) in a specified direction (bearing) from the given start location coordinates (latitude and longitude).
nav_bearing_from_coords
startLat
Latitude (decimal degrees, positive North) of start point e.g., 54.1523372

startLon
Longitude (decimal degrees, positive East) of start point e.g., -4.4861228

bearingDeg
Desired bearing measured in degrees clockwise from North

rangeNm
Desired range in nautical miles

doMagnetic
If True, assume a Magnetic Bearing, by accounting for the magnetic variation (auto-calculated). Otherwise, if False, assume a True Bearing.

doGreatCircle
If True, compute a great-circle arclength. Otherwise, if False, compute a rhumbline.
nav_bearing_from_place
Get the coordinates (latitude and longitude) of the endpoint at distance (range) in a specified direction (bearing) from the given start location.
nav_bearing_from_place
search_address
Can be any airport, ICAO code navaid, address, postcode etc. Global coverage.

bearingDeg
Desired bearing measured in degrees clockwise from North

rangeNm
Desired range in nautical miles

doMagnetic
If True, assume a Magnetic Bearing, by accounting for the magnetic variation (auto-calculated). Otherwise, if False, assume a True Bearing.

doGreatCircle
If True, compute a great-circle arclength. Otherwise, if False, compute a rhumbline.
flight_distance_between_coords
Get the distance (in nautical miles) and track (in degrees) between two locations specified by their latitude and longitude
flight_nav_distance_between_coords
lat1
Latitude (decimal degrees, positive North) of start location

lon1
Longitude (decimal degrees, positive East) of start location

lat2
Latitude (decimal degrees, positive North) of end location

lon2
Longitude (decimal degrees, positive East) of end location

doMagnetic
If True, present resulting track expressed as a Magnetic Bearing, by accounting for the magnetic variation (auto-calculated). Otherwise, if False, generates a True Bearing.

doGreatCircle
If True, compute a great-circle arclength. Otherwise, if False, compute a rhumbline.
flight_nav_distance_between_places
Get the distance (in nautical miles) and track (in degrees) between two places specified by name, address, etc.
flight_nav_distance_between_places
search_address1
Start location specified as a place. Can be any airport, icao code navaid, address, postcode etc. Global coverage.

search_address2
End location specified as a place. Can be any airport, icao code navaid, address, postcode etc. Global coverage.

doMagnetic
If True, present resulting track expressed as a Magnetic Bearing, by accounting for the magnetic variation (auto-calculated). Otherwise, if False, generates a True Bearing.

doGreatCircle
If True, compute a great-circle arclength. Otherwise, if False, compute a rhumbline.
driving_distance_between_coords
Get the driving distance (in kilometers) and time (in hours) between two locations specified by their latitude and longitude. Accounts for traffic conditions and incorporates ferry trip if water crossing required.
driving_distance_between_coords
lat1
Latitude (decimal degrees, positive North) of start location

lon1
Longitude (decimal degrees, positive East) of start location

lat2
Latitude (decimal degrees, positive North) of end location

lon2
Longitude (decimal degrees, positive East) of end location
driving_distance_between_places
Get the driving distance (in kilometers) and time (in hours) between two places specified by name, address, etc. Accounts for traffic conditions and incorporates ferry trip if water crossing required.
driving_distance_between_places
search_address1
Start location specified as a place. Can be any named place, landmark, address, postcode etc. Global coverage.

search_address2
End location specified as a place. Can be any named place, landmark, address, postcode etc. Global coverage.
flight_route_calculations
Perform VFR (Visual-Flight-Rules) flight route calculations between specified origin and destination airfields, plus up to ten optional intermediate waypoints (when not routing direct). Utilizes various functions in the toolkit to prepare the route, then performs detailed analysis, as summarised in the introduction to the toolkit above. An example call showing the detailed output fields is presented below this table.
perform_flight_route_calculations
origin
Departure airfield. Can be the name, ICAO code, IATA code or alternate identifier. Alternatively, just specify the latitude,longitude pair.

destination
Destination airfield. Can be the name, ICAO code, IATA code or alternate identifier. Alternatively, just specify the latitude,longitude pair.

altitudeFeetAverage
Altitude above mean sea level (AMSL), in feet, for the route (use an average that can be applied to the entire route). If blank, will assume default value of 2500 ft

iasKtsAverage
Indicated Airspeed (IAS) in knots, for the route (use an average that can be applied to the entire route). If blank, will assume default value of 100kts.

fuelFlowPerHourAverage
Fuel consumption, in units per hour (can be any typical value referring to gallons per hour, litres per hour, etc), for the route (use an average that can be applied to the entire route). The computed fuel used will be in the same units. If blank, will assume default value of 8 gallons per hour.

departMinutesFromNow
Planned departure time, expressed in minutes from now rounded to nearest 5 minutes. In order for the real-time weather computations to remain valid, it is recommended to keep this value within an hour or two (ie less than 120 minutes)

intermediateWayPoint1
Optional (if the route is not direct between the origin and the destination). Can be a place name, address, etc., or an airfield name, ICAO code, IATA code or alternate identifier (if overflying an airfield en route). Alternatively, can be a latitude,longitude pair. This is convenient for specifying the waypoint as a bearing/range relative to the origin — or to any other location such as a navigational aid — via the nav_bearing_from_coords or nav_bearing_from_place tools. Leave blank if not used.

intermediateWayPoint2
Optional. Same but for second intermediate waypoint. Requires intermediateWayPoint1 to have been specified (i.e., not blank).

intermediateWayPoint10
Optional. Same but for the tenth intermediate waypoint. Requires that all nine preceding intermediate waypoints have been specified (ie., none blank). Note: ten is the maximum number of intermediate waypoints which can be specified.

Example call to the flight_route_calculations function

content_copy check

Input Parameters:

origin=EGPK
destination=EGTK
altitudeFeetAverage=2500
iasKtsAverage=120
fuelFlowPerHourAverage=9
departMinutesFromNow=30
intermediateWayPoint1=54.3125,-2.25422
intermediateWayPoint2=EGNH
intermediateWayPoint3=
intermediateWayPoint4=
intermediateWayPoint5=
intermediateWayPoint6=
intermediateWayPoint7=
intermediateWayPoint8=
intermediateWayPoint3=
intermediateWayPoint10=

Response JSON:

{
    "summary": {
        "airportNameOrigin": "PRESTWICK",
        "airportICAOcodeOrigin": "EGPK",
        "latitudeOrigin": 55.5098091,
        "longitudeOrigin": -4.592294,
        "airportNameDestination": "OXFORD",
        "airportICAOcodeDestination": "EGTK",
        "latitudeDestination": 51.8327858,
        "longitudeDestination": -1.3157603,
        "totalDistanceNm": 283.3,
        "totalFlightTimeMins": 141.8,
        "totalFuelUsed": 21.27,
        "originAirfieldDensityAltitudeFeet": 420,
        "windSpeedOriginKts": 7,
        "windDirOrigin": 140,
        "QNHOriginHpA": 1002.0,
        "temperatureOriginCelsius": 15.0,
        "dewPointOriginCelsius": 12.0,
        "reportedCloudCoverOrigin": "SCT",
        "reportedCloudBaseOriginAGLft": 1900,
        "reportedFlightCategoryOrigin": "MVFR",
        "windSpeedDestinationKts": 7,
        "windDirDestination": 150,
        "QNHDestinationHpA": 1005.0,
        "temperatureDestinationCelsius": 15.0,
        "dewPointDestinationCelsius": 13.0,
        "reportedCloudCoverDestination": "FEW",
        "reportedCloudBaseDestinationAGLft": 2800,
        "reportedFlightCategoryDestination": "VFR",
        "computedCloudBaseAMSLft": 1042,
        "computedFreezingAltitudeAMSLft": 7099,
        "computedFreezingAltitudeAGLft": 7066,
        "sunElevationOrigin": -11,
        "sunOffNoseOrigin": 126,
        "sunElevationDestination": -34,
        "sunOffNoseDestination": 136,
        "sunriseOriginUTC": "06-Nov-2025 07:34:03",
        "sunsetOriginUTC": "06-Nov-2025 16:29:11",
        "middayOriginUTC": "06-Nov-2025 12:01:41",
        "middayOriginSunElevation": 18,
        "daylightHoursOrigin": "08:55:08",
        "sunriseDestinationUTC": "06-Nov-2025 07:21:38",
        "sunsetDestinationUTC": "06-Nov-2025 16:29:11",
        "middayDestinationUTC": "06-Nov-2025 11:55:28",
        "middayDestinationSunElevation": 20,
        "daylightHoursDestination": "09:07:33",
        "localTimeAtOriginNow": "06-Nov-2025 17:12:52",
        "localTimeAtOriginDeparture": "06-Nov-2025 17:45:00",
        "timeUTCDeparture": "06-Nov-2025 17:45:00",
        "timeUTCArrival": "06-Nov-2025 20:06:49",
        "localTimeAtOriginArrival": "06-Nov-2025 20:06:49",
        "localTimeAtDestinationNow": "06-Nov-2025 17:12:52",
        "localTimeAtDestinationArrival": "06-Nov-2025 20:06:49",
        "localTimeAtDestinationDeparture": "06-Nov-2025 17:45:00",
        "planningNotes": "",
        "skyVectorURL": "https://skyvector.com/?ll=53.859969675,-2.79978235&fpl=EGPK%205419N00215W%205346N00302W%20EGTK",
        "disclaimer": "Prepared by teckel from UNOFFICIAL sources. It is YOUR responsibility to verify data from OFFICIAL sources."
    },
    "legs": [
        {
            "number": 1,
            "from": "EGPK",
            "to": "54.3125,-2.25422",
            "details": {
                "latitudeStart": 55.5098091,
                "longitudeStart": -4.592294,
                "latitudeEnd": 54.3253977,
                "longitudeEnd": -2.2551792,
                "trackDegDec": 130,
                "trueHdgDegDec": 131,
                "magHdgDegDec": 132,
                "averageWindSpeedKts": 5,
                "averageWindDirDegTrue": 151,
                "groundSpeedKts": 120,
                "driftDegDec": 1,
                "tasKts": 125,
                "distanceNm": 107.77,
                "flightTimeMins": 53.81,
                "fuelUsed": 8.072,
                "crossWindKts": -2,
                "tailWindKts": -5,
                "pressureAltitudeFeet": 2803,
                "groundLevelDensityAltitudeFeet": 354,
                "machNumber": 0.191,
                "windSpeedStartKts": 7,
                "windDirStart": 140,
                "QNHStartHpA": 1002.0,
                "temperatureStartCelsius": 15,
                "dewPointStartCelsius": 12,
                "reportedCloudCoverStart": "SCT",
                "reportedCloudBaseStartAGLft": 1900,
                "reportedFlightCategoryStart": "MVFR",
                "windSpeedEndKts": 4,
                "windDirEnd": 170,
                "QNHEndHpA": 1004,
                "temperatureEndCelsius": 13,
                "dewPointEndCelsius": 12,
                "reportedCloudCoverEnd": "FEW",
                "reportedCloudBaseEndAGLft": 9200,
                "reportedFlightCategoryEnd": "MVFR",
                "computedCloudBaseAMSLft": 1560,
                "computedFreezingAltitudeAMSLft": 7617,
                "computedFreezingAltitudeAGLft": 7571,
                "sunElevationStart": -11,
                "sunOffNoseStart": 126,
                "sunElevationEnd": -20,
                "sunOffNoseEnd": 138,
                "sunriseUTC": "06-Nov-2025 07:34:03",
                "sunsetUTC": "06-Nov-2025 16:29:11",
                "middayUTC": "06-Nov-2025 12:01:41",
                "middaySunElevation": 18,
                "daylightHours": "08:55:08",
                "timeAtStartLocal": "06-Nov-2025 17:45:00",
                "timeAtStartUTC": "06-Nov-2025 17:45:00",
                "timeAtEndLocal": "06-Nov-2025 18:38:48",
                "timeAtEndUTC": "06-Nov-2025 18:38:48",
                "metNotes": ""
            }
        },
        {
            "number": 2,
            "from": "54.3125,-2.25422",
            "to": "EGNH",
            "details": {
                "latitudeStart": 54.3253977,
                "longitudeStart": -2.2551792,
                "latitudeEnd": 53.7718861,
                "longitudeEnd": -3.0358959,
                "trackDegDec": 220,
                "trueHdgDegDec": 218,
                "magHdgDegDec": 218,
                "averageWindSpeedKts": 4,
                "averageWindDirDegTrue": 170,
                "groundSpeedKts": 122,
                "driftDegDec": 2,
                "tasKts": 125,
                "distanceNm": 43.23,
                "flightTimeMins": 21.31,
                "fuelUsed": 3.196,
                "crossWindKts": 3,
                "tailWindKts": -3,
                "pressureAltitudeFeet": 2766,
                "groundLevelDensityAltitudeFeet": 352,
                "machNumber": 0.191,
                "windSpeedStartKts": 4,
                "windDirStart": 170,
                "QNHStartHpA": 1004.0,
                "temperatureStartCelsius": 13,
                "dewPointStartCelsius": 12,
                "reportedCloudCoverStart": "FEW",
                "reportedCloudBaseStartAGLft": 9200,
                "reportedFlightCategoryStart": "MVFR",
                "windSpeedEndKts": 5,
                "windDirEnd": 170,
                "QNHEndHpA": 1004,
                "temperatureEndCelsius": 14,
                "dewPointEndCelsius": 12,
                "reportedCloudCoverEnd": "NSC",
                "reportedCloudBaseEndAGLft": 5000,
                "reportedFlightCategoryEnd": "VFR",
                "computedCloudBaseAMSLft": 603,
                "computedFreezingAltitudeAMSLft": 6660,
                "computedFreezingAltitudeAGLft": 6562,
                "sunElevationStart": -20,
                "sunOffNoseStart": 51,
                "sunElevationEnd": -23,
                "sunOffNoseEnd": 55,
                "sunriseUTC": "06-Nov-2025 07:20:25",
                "sunsetUTC": "06-Nov-2025 16:24:09",
                "middayUTC": "06-Nov-2025 11:52:20",
                "middaySunElevation": 20,
                "daylightHours": "09:03:44",
                "timeAtStartLocal": "06-Nov-2025 18:38:48",
                "timeAtStartUTC": "06-Nov-2025 18:38:48",
                "timeAtEndLocal": "06-Nov-2025 19:00:06",
                "timeAtEndUTC": "06-Nov-2025 19:00:06",
                "metNotes": " EGNH:No reportedCloudBaseAGLft data available, using default: 5000   EGNH:No reportedCloudCover data available, using default: NSC  "
            }
        },
        {
            "number": 3,
            "from": "EGNH",
            "to": "EGTK",
            "details": {
                "latitudeStart": 53.7718861,
                "longitudeStart": -3.0358959,
                "latitudeEnd": 51.8327858,
                "longitudeEnd": -1.3157603,
                "trackDegDec": 151,
                "trueHdgDegDec": 151,
                "magHdgDegDec": 151,
                "averageWindSpeedKts": 6,
                "averageWindDirDegTrue": 158,
                "groundSpeedKts": 119,
                "driftDegDec": 0,
                "tasKts": 125,
                "distanceNm": 132.28,
                "flightTimeMins": 66.71,
                "fuelUsed": 10.006,
                "crossWindKts": -1,
                "tailWindKts": -6,
                "pressureAltitudeFeet": 2758,
                "groundLevelDensityAltitudeFeet": 286,
                "machNumber": 0.191,
                "windSpeedStartKts": 5,
                "windDirStart": 170,
                "QNHStartHpA": 1004.0,
                "temperatureStartCelsius": 14,
                "dewPointStartCelsius": 12,
                "reportedCloudCoverStart": "NSC",
                "reportedCloudBaseStartAGLft": 5000,
                "reportedFlightCategoryStart": "VFR",
                "windSpeedEndKts": 7,
                "windDirEnd": 150,
                "QNHEndHpA": 1005,
                "temperatureEndCelsius": 15,
                "dewPointEndCelsius": 13,
                "reportedCloudCoverEnd": "FEW",
                "reportedCloudBaseEndAGLft": 2800,
                "reportedFlightCategoryEnd": "VFR",
                "computedCloudBaseAMSLft": 1042,
                "computedFreezingAltitudeAMSLft": 7099,
                "computedFreezingAltitudeAGLft": 7066,
                "sunElevationStart": -23,
                "sunOffNoseStart": 122,
                "sunElevationEnd": -34,
                "sunOffNoseEnd": 136,
                "sunriseUTC": "06-Nov-2025 07:21:38",
                "sunsetUTC": "06-Nov-2025 16:29:11",
                "middayUTC": "06-Nov-2025 11:55:28",
                "middaySunElevation": 20,
                "daylightHours": "09:07:33",
                "timeAtStartLocal": "06-Nov-2025 19:00:07",
                "timeAtStartUTC": "06-Nov-2025 19:00:07",
                "timeAtEndLocal": "06-Nov-2025 20:06:49",
                "timeAtEndUTC": "06-Nov-2025 20:06:49",
                "metNotes": " EGNH:No reportedCloudBaseAGLft data available, using default: 5000   EGNH:No reportedCloureportedCloudCoverdBaseAGLft data available, using default: NSC  "
            }
        }
    ],
    "airports": {
        "origin": {
            "info": {
                "name": "PRESTWICK",
                "icaoCode": "EGPK",
                "iataCode": "PIK",
                "altIdentifier": null,
                "type": "Airport resp. Airfield IFR",
                "pprRequired": false,
                "contact": null,
                "remarks": null,
                "telephoneServices": null,
                "operatingHours": null
            },
            "runways": [
                {
                    "designator": "12",
                    "dimensions": "Asphalt 2986 X 46 m",
                    "trueHeading": 121,
                    "wind": "2.3 Kts crosswind from the right, 7 Kts headwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                },
                {
                    "designator": "30",
                    "dimensions": "Asphalt 2986 X 46 m",
                    "trueHeading": 301,
                    "wind": "2.3 Kts crosswind from the left, 7 Kts tailwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                },
                {
                    "designator": "03",
                    "dimensions": "Asphalt 1905 X 45 m",
                    "trueHeading": 24,
                    "wind": "6.3 Kts crosswind from the right, 3 Kts tailwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                },
                {
                    "designator": "21",
                    "dimensions": "Asphalt 1905 X 45 m",
                    "trueHeading": 204,
                    "wind": "6.3 Kts crosswind from the left, 3 Kts headwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                }
            ],
            "frequencies": [
                {
                    "frequency": "Tower PRESTWICK TOWER 127.155 MHz"
                },
                {
                    "frequency": "Approach PRESTWICK APPROACH 129.450 MHz"
                },
                {
                    "frequency": "Radar PRESTWICK RADAR 124.630 MHz"
                },
                {
                    "frequency": "ATIS PRESTWICK INFORMATION 121.130 MHz"
                }
            ]
        },
        "destination": {
            "info": {
                "name": "OXFORD",
                "icaoCode": "EGTK",
                "iataCode": "OXF",
                "altIdentifier": null,
                "type": "Airport resp. Airfield IFR",
                "pprRequired": false,
                "contact": null,
                "remarks": null,
                "telephoneServices": null,
                "operatingHours": null
            },
            "runways": [
                {
                    "designator": "01",
                    "dimensions": "Asphalt 1552 X 30 m",
                    "trueHeading": 10,
                    "wind": "4.5 Kts crosswind from the right, 5 Kts tailwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                },
                {
                    "designator": "19",
                    "dimensions": "Asphalt 1552 X 30 m",
                    "trueHeading": 190,
                    "wind": "4.5 Kts crosswind from the left, 5 Kts headwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                },
                {
                    "designator": "11",
                    "dimensions": "Asphalt 760 X 28 m",
                    "trueHeading": 110,
                    "wind": "4.5 Kts crosswind from the right, 5 Kts headwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                },
                {
                    "designator": "29",
                    "dimensions": "Asphalt 760 X 28 m",
                    "trueHeading": 290,
                    "wind": "4.5 Kts crosswind from the left, 5 Kts tailwind",
                    "status": "Active",
                    "visualApproachAids": null,
                    "instrumentApproachAids": null,
                    "lightingSystems": null,
                    "pilotControlledLighting": false
                }
            ],
            "frequencies": [
                {
                    "frequency": "Approach OXFORD DIRECTOR 119.980 MHz"
                },
                {
                    "frequency": "Tower OXFORD TOWER 133.430 MHz"
                },
                {
                    "frequency": "Radar OXFORD RADAR 125.090 MHz"
                },
                {
                    "frequency": "Ground OXFORD GROUND 121.955 MHz"
                },
                {
                    "frequency": "ATIS OXFORD ATIS 136.230 MHz"
                }
            ]
        }
    },
    "weather": {
        "metars": [  ]
        ],
        "tafs":  [  ]
            }
        ]
    }
}

Teckel Credit Balance

Each toolkit also has a function for checking the teckel credit balance pertaining to the Ethereum address tied to the API key.

The LLM prompt would be:

“What is my teckel credit balance?”

The corresponding direct RESTful API method is:

get_teckel_credit_balance_for_apikey

 

Tools Pricing

MCP/API billing is accrued per call in real-time, but aggregated hourly in the teckel billing system, so recent calls will not show up immediately in your account balance (and statements), but will appear after the upcoming hourly billing cycle.

Ethereum Toolkit Tools

Pricing is identical to the Ethereum RPC Server (JSON-RPC Method) pricing for web3 services.

Navigation Toolkit Tools

The following table lists all the available MCP/API functions and the corresponding price per call. Some functions make nested calls to other functions. Each nested call is billed separately.

For MCP calls made via LLMs, the LLM fees are charged separately by the MCP client app and are not included in these API call fees.

For functions that rely on external third-party services such as Google APIs, the fees charged by the external service are handled by teckel and re-charged in these API call fees.

The Base Call Fee is 1 teckel credit (tc) for the Navigation Toolkit pricing.

Underlying method (for RESTful API calls) Price per call as multiple of Base Call Fee (includes nested call fees). The Base Call Fee is one (1) teckel credit (tc). Approx. price in USD assuming in-app purchase of 1 million teckel credits for USD 1.99. (20% cheaper if bulk purchase of 5 million teckel credits for USD 7.99.)
get_metars
8500.17 per 100 calls
get_nearest_METAR_for_coords
8500.17 per 100 calls
get_nearest_METAR_for_place
42000.08 per 10 calls
get_METARS_for_coords_range
8500.17 per 100 calls
get_METARS_for_place_range
42000.08 per 10 calls
get_tafs
8500.17 per 100 calls
get_airports_for_coords_range
8500.17 per 100 calls
get_navaids_for_coords_within_range
8500.17 per 100 calls
get_fixes_for_coords_range
8500.17 per 100 calls
get_features_for_coords_range
8500.17 per 100 calls
get_obstacles_for_coords_range
8500.17 per 100 calls
perform_google_geocode_search
33500.07 per 10 calls
perform_google_nearest_places_search
235350.05 per call
get_google_place_details
134000.03 per call
perform_openaip_airport_search
8500.17 per 100 calls
perform_openaip_airport_search_coords
8500.17 per 100 calls
perform_openaip_airport_search_place
42000.08 per 10 calls
get_current_time_at_location_coords
33500.07 per 10 calls
get_current_time_at_place
33500.07 per 10 calls
get_later_time_at_location_coords
33500.07 per 10 calls
get_later_time_at_place
33500.07 per 10 calls
get_nav_bounding_box
8500.17 per 100 calls
perform_sun_calculations
8500.17 per 100 calls
nav_bearing_from_coords
8500.17 per 100 calls
nav_bearing_from_place
42000.08 per 10 calls
flight_nav_distance_between_coords
8500.17 per 100 calls
flight_nav_distance_between_places
75500.15 per 10 calls
driving_distance_between_coords
33500.07 per 10 calls
driving_distance_between_places
33500.07 per 10 calls
perform_flight_route_calculations
300000.06 per call for a single leg, plus 0.057 per additional leg.

Rate Limiting

All MCP/API calls are subject to rate-limiting per API key. The thresholds are not published, but if a given API key has exceeded the rate limit, a 429 error code will be returned on the given call.

 

Errors

If the MCP/API call fails due to user error resulting in a 4xx error code, the user is charged one Base Call Fee. If the API call fails due to server error resulting in a 5xx error code, the user is not charged. If the given call is part of a cascade of nested calls, the above rules apply to the “outer” call: In other words, if the outer call fails with a 4xx error code, the user is charged one Base Call Fee (for the failed outer call), and there will be no charge for any of the cascaded calls (whether they succeeded or not). Likewise, if the outer call fails with a 5xx error code, the user is not charged at all (even if the cascaded calls succeed).

 

Note on API Key Security

Should you have concerns that your API key has been compromised (and someone else may be consuming your teckel credits by using your key), simply replace the key via the API Key Manager → Replace API key in the teckel App. The old key will then be immediately disabled.