teckel: AI Toolkits

View the detailed teckel AI Toolkits pricing chart

Bulk discounts: larger teckel credit top-ups earn graduated discounts — up to 12.5% — see Pricing.

Agentic AI toolkits — callable from any MCP client, any HTTP client, or directly inside n8n. Authenticate with your account address and API key (see teckel Account & Identity), and pay only for what you use in teckel credits.

Every teckel toolkit runs on the same private, anonymous account foundation: no IP logging, no KYC, just your account address and API key.

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 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 Ethereum RPC service 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.

teckel IPFS Toolkit

This Toolkit gives LLMs, AI Agents, and automated workflows the ability to utilize the InterPlanetary File System (IPFS) as a decentralized backend storage medium. Once connected via your MCP-client-of-choice (e.g., Cursor, Claude, n8n), the LLM can upload, retrieve, pin, encrypt, and manage files on IPFS through natural-language prompts — or developers can call the same functions directly via RESTful API.

Typical LLM prompts using these tools:

"Upload this PDF to IPFS with the nickname 'contract_v3' and encrypt it."

"List all my IPFS files that are pinned and contain 'invoice' in the nickname."

"Retrieve and decrypt the IPFS file with CID Qm… and publish it to a public URL."

"Unpin and remove all unencrypted video files from my IPFS account."

Key capabilities:

  • Upload files to IPFS via multipart form or base64-encoded payload, with optional encryption and custom nickname

  • Retrieve files by CID with automatic decryption (for files originally uploaded via teckel)

  • Pin / unpin individual CIDs or batches of files (selected via fuzzy nickname search) to control persistence

  • List and filter account inventory by nickname, pinned state, encrypted state, or content type (image / audio / video / etc.)

  • Remove files from the teckel IPFS node and account inventory

  • Publish any stored IPFS file to the teckel web server, returning a browseable public URL

  • Content moderation — all uploads are pre-scanned for malware and policy compliance before acceptance

  • Encryption options — server-side encryption keyed to the API key for convenience, or offline pre-encryption for full end-to-end privacy

  • Full interoperability with the IPFS functionality of the teckel App

MCP endpoint: https://mcp-servers.bh.tkllabs.io:9780/ipfs-mcp

GitHub: github.com/teckel-mcp-servers/ipfs-toolkit

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.

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"}}

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":  [  ]
            }
        ]
    }
}

Using the n8n Community Nodes

For users of n8n — the popular fair-code workflow automation platform — the same teckel Toolkit functions are also available as n8n community nodes, published on npm by teckel-io. This lets no-code/low-code automation builders use teckel's Ethereum, Navigation, and IPFS tools directly inside n8n workflows, without needing to write JSON-RPC calls or configure an MCP client.

Three packages are available:

  • n8n-nodes-teckel-ethereum — Ethereum mainnet and Sepolia testnet read-only access (price, gas, balances, transactions, blocks)

  • n8n-nodes-teckel-navigation — Worldwide navigation, time, sun position, METAR/TAF aviation weather, airport search, and full VFR flight route planning

  • n8n-nodes-teckel-ipfs — IPFS upload, retrieval, pinning, encryption, and publishing

Installation (via the n8n UI, recommended):

  • Open your n8n instance in your browser

  • Click Settings (bottom left)

  • Click Community Nodes

  • Click Install

  • Enter the package name (e.g., n8n-nodes-teckel-ipfs)

  • Tick the "I understand the risks" checkbox

  • Click Install

  • Repeat for n8n-nodes-teckel-ethereum and n8n-nodes-teckel-navigation

As with the MCP servers and RESTful API, authentication uses your teckel API key as a Bearer token, and usage is billed pay-as-you-go in teckel credits.

All three packages are MIT-licensed and published by teckel-io on npm.

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": []
}

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.