adsb-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@adsb-mcp-serverWhat are the 5 closest planes to my feeder?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ADS-B MCP Server
A Model Context Protocol (MCP) server that exposes the data of a typical ADS-B feeder instance for use from within Claude (and possibly other LLMs).
This was initially written in order to provide an MCP server connected to the ADS-B Feeder Image running an Ultrafeeder container - but it will work with any feeder that is providing the APIs typically associated with readsb / tar1090.
Features
This MCP server so far provides access to:
Aircraft Data: Real-time aircraft positions, callsigns, altitudes, and tracking information plus optionally (where available) route information for commercial flights
Receiver Statistics: Performance metrics, message counts, and system status
Search Functionality: Find specific aircraft by callsign, hex code, or flight number
Range Statistics: Coverage area and signal range information
Related MCP server: Skyfly MCP Server
Installation
Prerequisites
Node.js 18.0 or higher
npm (comes with Node.js)
Access to an ADS-B feeder
Install Dependencies
# Clone the repository
git clone https://github.com/dirkhh/adsb-mcp-server.git
cd adsb-mcp-server
# Install dependencies
npm install
# Build the project
npm run buildMCP Client Setup Guide
This guide will help you connect various MCP clients to your ADS-B MCP server.
Prerequisites
Running ADS-B Feeder: Make sure your ADS-B feeder is running and accessible - the easiest way to do that may be running the ADS-B Feeder Image
Python MCP Server: The readsb MCP server should be working
Network Access: Client needs access to your feeder's API endpoints
Option 1: Claude Desktop (Recommended)
Step 1: Configure Claude Desktop
Recommended: Use the automatic setup script:
npm run build
node dist/setup_remote_config.jsThis script will:
Prompt you for your ADS-B feeder host and port
Automatically create the correct configuration
Merge with existing Claude Desktop configuration if present
Provide clear instructions for next steps
Step 2: Restart Claude Desktop (or Reload MCP Configuration if your version of Claude Desktop supports that)
Close and reopen Claude Desktop to load the new configuration. As of this writing, not all versions of Claude have an option to reload its configuration.
Step 3: Test the Connection
In Claude Desktop, try asking:
"What are the 5 closest planes to my feeder?"
"Show me aircraft to the east of my location"
Option 2: MCP Inspector
Install MCP Inspector
npm install -g @modelcontextprotocol/inspectorRun with ADS-B MCP server
npm run build
npx @modelcontextprotocol/inspector node dist/src/readsb_mcp_server.js --base-url http://adsb-feeder.localThis will open a web interface where you can test the MCP server tools.
Creating MCP Bundles
You can create an MCP Bundle (.mcpb file) for easy distribution using the official MCPB tool:
# Install the official MCPB tool (Node.js required)
npm install -g @anthropic-ai/mcpb
# Build the project
npm run build
# Create bundle using official tool
mcpb pack .The bundle will be created as adsb-mcp-server.mcpb and can be distributed and installed in MCP-compatible clients. The bundle includes all Node.js dependencies for self-contained operation.
Option 3: Custom Node.js Client
Use the included simple MCP client:
npm run build
node dist/test/remote_mcp_client.jsThis provides an interactive command-line interface to test all the MCP tools.
Option 4: Test Script
Run the basic connection test:
npm run build
node dist/test/test_remote_connection.jsThis will verify that the ADS-B MCP server is working correctly.
Configuration Options
Base URL Configuration
Adjust the --base-url parameter based on your setup:
Typical ADS-B Feeder Image: (by default
adsb-feeder.localis used as host)Feeder with known IP address
--base-url http://192.168.123.45Local feeder running on this system:
--base-url http://localhostRunning in a container in the ADS-B Feeder Image adsb_im_bridge Docker network:
--base-url http://ultrafeeder
Port Configuration
The server connects to these readsb endpoints:
Port 8080: REST API (
/data/aircraft.json,/data/stats.json)
Make sure these ports are accessible from your MCP client. If your tar1090 runs on a different port, adjust the command line accordingly, e.g. --base-url http://100.99.98.97:6543
Troubleshooting
Connection Issues
Check if you can manually get to the ADS-B data:
curl http://adsb-feeder.local:8080/data/aircraft.json
Claude configuration issues
Check the Claude MCP logs:
e.g., ~/Library/Logs/Claude/mcp-server-readsb.log on macOS
Performance Issues
Limit result counts to avoid overwhelming responses
Use distance filters to reduce data processing
Monitor memory usage for large aircraft datasets
Example Queries
Once connected, you can ask natural language questions like:
"What are the 5 closest aircraft to my feeder?"
"Show me all planes to the east within 50 miles"
"Are there any aircraft to the north?"
"What's the closest plane to the south?"
"Find aircraft in the northeast quadrant"
"Search for flight UAL123"
"Show me receiver statistics"
Advanced Configuration
Custom Auto-Approval
Configure which tools require approval:
{
"autoApprove": [
"get_aircraft_data",
"get_receiver_stats"
]
}Tools not in autoApprove will require manual approval in Claude Desktop.
Support
If you encounter issues:
Reach out in the #adsb-dot-im channel on the SDR Enthusiasts Discord
License
This project contains some AI generated code (with potentially questionable IP issues); overall the project is licensed under the GPLv3.
Available Tools
6 toolsget_aircraft_by_directionB
Get aircraft in a specific direction from the feeder
| Name | Required | Description | Default |
|---|---|---|---|
| direction | Yes | Direction to search for aircraft | |
| max_distance | No | Maximum distance to consider (nautical miles) | |
| count | No | Maximum number of aircraft to return | |
| include_routes | No | Include flight route information (requires internet connection) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only says 'from the feeder', which is vague. It does not explain how direction filters aircraft, data freshness, sorting order, or whether results are limited to the feeder's location.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and to the point. It front-loads the essential purpose without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is too minimal. It does not specify what the output looks like, how 'direction' is interpreted (e.g., relative to feeder's facing or cardinal directions), or any important details about the include_routes parameter's internet requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters have descriptions in the schema. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get aircraft in a specific direction from the feeder' clearly states the action (get) and the resource (aircraft) with a specific modifier (direction). It distinguishes from sibling tools like get_closest_aircraft and search_aircraft by specifying direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_closest_aircraft or search_aircraft. It does not mention any prerequisites or limitations, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aircraft_dataC
Get current aircraft positions and information
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: 'json' for raw data, 'summary' for human-readable | json |
| filter_distance | No | Filter aircraft within this distance (nautical miles) | |
| filter_altitude | No | Filter aircraft by altitude range (feet) | |
| include_routes | No | Include flight route information (requires internet connection) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like data freshness, caching, or permissions. It only states 'current' without elaboration, and no mention of side effects or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence with no verbosity. However, it could be slightly expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks details about output format, data scope, or what 'information' includes. Given the absence of an output schema, more context is needed for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter details; however, the schema already covers 100% of parameters with clear descriptions (e.g., format enum, filter_distance). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves current aircraft positions and information, which differentiates it from siblings like get_aircraft_by_direction or search_aircraft. However, it could be more specific about what 'information' includes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention exclusions or typical use cases, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_closest_aircraftB
Get the N closest aircraft to the feeder location
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of closest aircraft to return (1-50) | |
| max_distance | No | Maximum distance to consider (nautical miles) | |
| include_routes | No | Include flight route information (requires internet connection) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action, with no mention of side effects, permissions, or return behavior. The parameter description for include_routes covers internet requirement, but the tool description adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the key verb and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters and no output schema or annotations, the description is minimal. It lacks information about response format, sorting, error handling, or default behavior beyond what the schema provides. An agent may need more guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have descriptions in the schema. The tool description paraphrases the count parameter but does not add new meaning. The baseline of 3 is appropriate as the description does not compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'closest aircraft', and the context 'to the feeder location'. It effectively distinguishes from sibling tools like 'get_aircraft_by_direction' or 'search_aircraft'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving closest aircraft but does not explicitly mention when not to use it or alternatives. The context is clear but lacks direct comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_range_statisticsB
Get receiver range and coverage statistics
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only says 'Get statistics', without disclosing computational cost, data freshness, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with zero wasted words. It is fully front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is minimal. It lacks explanation of what 'range and coverage statistics' include, leaving the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and schema coverage is 100%. The description adds no parameter info, but none is needed. The score is baseline 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves receiver range and coverage statistics, using a specific verb and resource. However, it does not differentiate from the sibling tool 'get_receiver_stats', which may cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_receiver_stats'. The description lacks explicit context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_receiver_statsB
Get readsb receiver statistics and performance metrics
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format | summary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the tool 'gets' data, implying a read-only operation, but does not detail any side effects, authorization needs, rate limits, or other behavioral traits beyond the basic read action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. However, it could be slightly more structured by front-loading key actions, but it remains clear and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and no output schema, the description is minimal. It does not specify what the 'statistics and performance metrics' include (e.g., CPU load, uptime, message counts), leaving the agent without sufficient detail to understand the full scope of the tool's output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter (format) which is already fully described by its enum and default. The description adds no additional meaning or context beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get readsb receiver statistics and performance metrics' clearly states the tool's function, using specific verbs and resources (receiver stats, performance metrics) that distinguish it from sibling tools focused on aircraft data like get_aircraft_data or search_aircraft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. No explicit conditions, prerequisites, or exclusions are mentioned, leaving the agent to infer usage context without support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_aircraftA
Search for specific aircraft by callsign, hex code, or flight number
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (callsign, hex code, or flight number) | |
| search_type | No | Type of search to perform | any |
| include_routes | No | Include flight route information (requires internet connection) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions that include_routes requires internet connection, but does not disclose other behavioral traits such as read-only nature, rate limits, or response size. The description is minimal and lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently conveys the tool's purpose. No extraneous information is included, and the structure is front-loaded with the key action and criteria.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters and no output schema, the description is minimally adequate. It does not explain return values or any limitations like pagination, which could be helpful for a search tool. However, the parameter descriptions in the schema compensate slightly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described in the input schema. The description adds a note about internet requirement for include_routes, which provides some extra context, but overall adds marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and resource ('aircraft'), and specifies search criteria (callsign, hex code, flight number). It distinguishes itself from sibling tools like get_aircraft_data and get_closest_aircraft, which are for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching specific aircraft but does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool names are mentioned, leaving the agent to infer from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct purpose: direction filter, current positions, closest aircraft, range stats, receiver stats, and search by identifier. There is no overlap in functionality.
All tools follow a consistent verb_noun pattern (get_ or search_ prefix), making the naming predictable and easy to understand.
With 6 tools, the server is well-scoped for an ADS-B tracking service, covering the essential query and statistics operations without excess.
The tool surface covers core aircraft querying, searching, and receiver statistics. Missing features like historical data or detailed flight tracking are minor gaps for a basic MCP server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only access to live ADSBiq aircraft and network state, with community contribution metadata.
Flights MCP — wraps OpenSky Network API (free, no auth required)
Aircraft registry search, flight history, and analytics powered by ADS-B Exchange data.
OpenSky MCP — OpenSky Network API (free, no auth for anonymous access)
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides access to real-time and historical flight data from Flightradar24 API, enabling users to track live aircraft positions, query flight histories, and retrieve comprehensive aviation information including aircraft, airline, and airport details.1514MIT
- AlicenseNot gradedqualityDmaintenanceProvides real-time aircraft tracking data from OpenSky Network combined with FAA aircraft registry information, enabling rich aviation queries that merge live flight positions with technical specifications.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with real-time aircraft tracking, FAA registration, and OpenSky flight data through the Model Context Protocol.1MIT
- AlicenseAqualityAmaintenanceMCP server for FlightAware AeroAPI that enables live flight tracking, airport boards, operator and aircraft lookup, schedule retrieval, and flight alert management via natural language.342531MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dirkhh/adsb-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server