teckel navigation toolbox
Give LLM/AI/Agents the ability to provide accurate navigation information (time & place, road-trips, general aviation).
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”.
Download App
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.”
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.
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)
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.
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:
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:
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:
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'
{"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) | Underlying method (for RESTful API calls) | Parameters |
|---|---|---|
| ethereumPriceSummaryGet the current ETH-USD price, plus the current gas prices for the ethereum mainnet and sepolia testnet | get_ethereum_price_summary | |
| eth_gasPriceReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
| net_peerCountReturns the peer count on the ethereum execution client node (the given node can be specified in the request header) | net_peerCount | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
| eth_getUncleCountByBlockNumberReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)blockSpecify the integer block number (as an integer, will be automatically converted to a hex string), or one of 'latest', 'earliest', 'pending', 'safe', 'finalized' |
| eth_blockNumberReturns the number of most recent block. Wraps the eth_blockNumber method from the standard ethereum json-rpc library | eth_blockNumber | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
| eth_getTransactionByBlockHashAndIndexReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)block_hashSpecify the block hashindexSpecify the index (as an integer, will be automatically converted to a hex string) |
| eth_getTransactionByHashReturns the information about a transaction requested by transaction hash. Wraps the eth_getTransactionByHash method from the standard ethereum json-rpc library | eth_getTransactionByHash | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)hashSpecify the transaction hash |
| eth_getBalanceReturns the balance of the account of given address. Wraps the eth_getBalance method from the standard ethereum json-rpc library | eth_getBalance | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)addressSpecify the ethereum addressblockSpecify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized' |
| eth_callExecutes 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)addressSpecify the ethereum addressdataSpecify the calldata hex stringblockSpecify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized' |
| eth_getCode | eth_getCode | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)addressSpecify the ethereum address of the functionblockSpecify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized' |
| eth_getTransactionByBlockNumberAndIndexReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)blockSpecify the integer block number (as an integer, will be automatically converted to a hex string), or one of 'latest', 'earliest', 'pending', 'safe', 'finalized'indexSpecify the index (as an integer, will be automatically converted to a hex string) |
| eth_getBlockTransactionCountByHashReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
| eth_getTransactionByBlockHashAndIndexReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)block_hashSpecify the block hashindexSpecify the index (as an integer, will be automatically converted to a hex string) |
| eth_getTransactionReceiptReturns the receipt of a transaction by transaction hash. Wraps the eth_getTransactionReceipt method from the standard ethereum json-rpc library | eth_getTransactionReceipt | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)hashSpecify the transaction hash |
| eth_getBlockByHashReturns information about a block by hash. Wraps the eth_getBlockByHash method from the standard ethereum json-rpc library | eth_getBlockByHash | networkSpecify the network 'mainnetis_fullSpecify whether to fetch the full block. If false, will only fetch the header and the list of transaction hashes |
| eth_getTransactionCountReturns the number of transactions sent from an address. Wraps the eth_getTransactionCount method from the standard ethereum json-rpc library | eth_getTransactionCount | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)addressSpecify the ethereum addressblockSpecify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized' |
| eth_getBlockReceiptsReturns the receipts of a block by hash. Wraps the eth_getBlockReceipts method from the standard ethereum json-rpc library | eth_getBlockReceipts | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
| eth_getStorageAtReturns the value from a storage position at a given address. Wraps the eth_getStorageAt method from the standard ethereum json-rpc library | eth_getStorageAt | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)addressSpecify the ethereum addressindexSpecify the index (as an integer, will be automatically converted to a hex string)blockSpecify the block as one of 'latest', 'earliest', 'pending', 'safe', 'finalized' |
| eth_getTransactionByHashReturns the information about a transaction requested by transaction hash. Wraps the eth_getTransactionByHash method from the standard ethereum json-rpc library | eth_getTransactionByHash | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)hashSpecify the transaction hash |
| eth_chainIdReturns the chain ID used for signing replay-protected transactions. Wraps the eth_chainId method from the standard ethereum json-rpc library | eth_chainId | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
| eth_getBlockByNumberReturns information about a block by hash. Wraps the eth_getBlockByNumber method from the standard ethereum json-rpc library | eth_getBlockByNumber | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet)blockSpecify the integer block number (as an integer, will be automatically converted to a hex string), or one of 'latest', 'earliest', 'pending', 'safe', 'finalized'is_fullSpecify whether to fetch the full block. If false, will only fetch the header and the list of transaction hashes |
| eth_getBlockTransactionCountByNumberReturns 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 | networkSpecify the network 'mainnet' or 'sepolia', or leave blank to apply the default (mainnet) |
Navigation Toolkit Tools
| Name & Description (for MCP clients) | Underlying method (for RESTful 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
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 | 850 | 0.17 per 100 calls |
| get_nearest_METAR_for_coords | 850 | 0.17 per 100 calls |
| get_nearest_METAR_for_place | 4200 | 0.08 per 10 calls |
| get_METARS_for_coords_range | 850 | 0.17 per 100 calls |
| get_METARS_for_place_range | 4200 | 0.08 per 10 calls |
| get_tafs | 850 | 0.17 per 100 calls |
| get_airports_for_coords_range | 850 | 0.17 per 100 calls |
| get_navaids_for_coords_within_range | 850 | 0.17 per 100 calls |
| get_fixes_for_coords_range | 850 | 0.17 per 100 calls |
| get_features_for_coords_range | 850 | 0.17 per 100 calls |
| get_obstacles_for_coords_range | 850 | 0.17 per 100 calls |
| perform_google_geocode_search | 3350 | 0.07 per 10 calls |
| perform_google_nearest_places_search | 23535 | 0.05 per call |
| get_google_place_details | 13400 | 0.03 per call |
| perform_openaip_airport_search | 850 | 0.17 per 100 calls |
| perform_openaip_airport_search_coords | 850 | 0.17 per 100 calls |
| perform_openaip_airport_search_place | 4200 | 0.08 per 10 calls |
| get_current_time_at_location_coords | 3350 | 0.07 per 10 calls |
| get_current_time_at_place | 3350 | 0.07 per 10 calls |
| get_later_time_at_location_coords | 3350 | 0.07 per 10 calls |
| get_later_time_at_place | 3350 | 0.07 per 10 calls |
| get_nav_bounding_box | 850 | 0.17 per 100 calls |
| perform_sun_calculations | 850 | 0.17 per 100 calls |
| nav_bearing_from_coords | 850 | 0.17 per 100 calls |
| nav_bearing_from_place | 4200 | 0.08 per 10 calls |
| flight_nav_distance_between_coords | 850 | 0.17 per 100 calls |
| flight_nav_distance_between_places | 7550 | 0.15 per 10 calls |
| driving_distance_between_coords | 3350 | 0.07 per 10 calls |
| driving_distance_between_places | 3350 | 0.07 per 10 calls |
| perform_flight_route_calculations | 30000 | 0.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.
Download App
Related Servers
Spotify
Connects your Spotify account to AI tools, allowing access to your music library, playlists, and playback controls.
企业经营分析洞察服务
Provides in-depth analysis of enterprise operations, including business status, development, and market performance.
Paramus Chemistry INTENT
Makes hundreds of chemical calculations and AI model functions accessible to LLMs
MCP Hub
A lightweight MCP Hub to centralize your MCP servers in one place.
Phone Carrier Detector
Detects Chinese mobile phone carriers, including China Mobile, China Unicom, China Telecom, and virtual carriers.
tip.md x402 + CDP
An MCP server for the tip.md platform that enables AI agents to facilitate crypto tipping using x402 payment collection and CDP automatic disbursement.
Sidekick for InDesign
Lets your AI assistant talk to InDesign. Not about it. Actually control it.
AbuseIpDB MCP Server
A Model Context Protocol (MCP) server implementation that provides seamless integration with the AbuseIPDB API for IP reputation checking and abuse report management.
Horoscope MCP Server
Provides daily horoscope readings and fortune telling for all 12 zodiac signs using a horoscope API.
Phone Carrier Detector
Detects Chinese mobile phone carriers, including China Mobile, China Unicom, China Telecom, and virtual operators.