Skip to content

Commit 39a750e

Browse files
ivanvia7jirispilka
andauthored
feat(flightradar24-mcp-server): add new server (#49)
Co-authored-by: Jiří Spilka <[email protected]>
1 parent eb5e22e commit 39a750e

29 files changed

+11403
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"actorSpecification": 1,
3+
"name": "flightradar24-mcp-server",
4+
"title": "Flightradar24 MCP Server",
5+
"description": "MCP server for real-time flight tracking using Flightradar24 data.",
6+
"version": "0.1",
7+
"buildTag": "latest",
8+
"usesStandbyMode": true,
9+
"meta": {
10+
"templateId": "ts-mcp-server"
11+
},
12+
"env": [
13+
{ "name": "FR24_API_KEY", "description": "Your Flightradar24 API key", "required": true },
14+
{ "name": "FR24_API_URL", "description": "Flightradar24 API base URL", "required": false }
15+
],
16+
"payPerEvent": "./pay_per_event.json",
17+
"dockerfile": "../Dockerfile",
18+
"webServerMcpPath": "/mcp"
19+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"actor-start": {
3+
"eventTitle": "Price for Actor start",
4+
"eventDescription": "Flat fee for starting an Actor run.",
5+
"eventPriceUsd": 0.1
6+
},
7+
"get_flight_positions": {
8+
"eventTitle": "Get real-time flight positions",
9+
"eventDescription": "Flat fee for each get_flight_positions tool call.",
10+
"eventPriceUsd": 0.03
11+
},
12+
"get_flight_eta": {
13+
"eventTitle": "Get estimated arrival time for a flight",
14+
"eventDescription": "Flat fee for each get_flight_eta tool call.",
15+
"eventPriceUsd": 0.02
16+
}
17+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
root = true
2+
3+
[*]
4+
indent_style = space
5+
indent_size = 4
6+
charset = utf-8
7+
trim_trailing_whitespace = true
8+
insert_final_newline = true
9+
end_of_line = lf
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# This file tells Git which files shouldn't be added to source control
2+
3+
.idea
4+
.vscode
5+
.zed
6+
storage
7+
apify_storage
8+
crawlee_storage
9+
node_modules
10+
dist
11+
tsconfig.tsbuildinfo
12+
13+
# Added by Apify CLI
14+
.venv
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.prettierignore
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"printWidth": 120,
3+
"singleQuote": true,
4+
"tabWidth": 4
5+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# ---- Build stage ----
2+
FROM apify/actor-node:22 AS builder
3+
WORKDIR /usr/src/app
4+
5+
# Copy whole repo (dist/node_modules ignored by .dockerignore)
6+
COPY . .
7+
8+
# Install root deps from lockfile (includes dev deps for building)
9+
RUN npm ci --include=dev --audit=false
10+
11+
# Build inner MCP server (supports single or double nested layout)
12+
RUN set -eux; \
13+
if [ -d "flightradar24-mcp-server/flightradar24-mcp-server" ]; then \
14+
INNER="flightradar24-mcp-server/flightradar24-mcp-server"; \
15+
elif [ -d "flightradar24-mcp-server" ]; then \
16+
INNER="flightradar24-mcp-server"; \
17+
else \
18+
echo "Inner MCP server folder not found" >&2; exit 1; \
19+
fi; \
20+
npm ci --include=dev --audit=false --prefix "$INNER"; \
21+
npm run build --prefix "$INNER"; \
22+
test -f "$INNER/dist/index.js" || (echo "Missing $INNER/dist/index.js" >&2; ls -R "$INNER"; exit 1)
23+
24+
# Build outer actor (TypeScript -> dist)
25+
RUN npm run build
26+
27+
# ---- Runtime stage ----
28+
FROM apify/actor-node:22
29+
WORKDIR /usr/src/app
30+
31+
# Copy built app and node_modules from builder
32+
COPY --from=builder /usr/src/app /usr/src/app
33+
34+
# Production env
35+
ENV NODE_ENV=production
36+
37+
# Optionally prune dev deps to slim image (safe even if none)
38+
RUN npm prune --omit=dev || true
39+
40+
# Start the Actor (HTTP MCP proxy server)
41+
CMD ["node", "dist/main.js"]

flightradar24-mcp-server/README.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
3+
# Flightradar24 MCP Server
4+
5+
A Model Context Protocol (MCP) server for real-time flight tracking using Flightradar24 data, published as an Apify Actor. This server enables MCP clients to access live flight positions and estimated arrival times via a standardized API.
6+
7+
**About this MCP Server:** To understand how to connect to and utilize this MCP server, please refer to the official Model Context Protocol documentation at [mcp.apify.com](https://mcp.apify.com).
8+
9+
[![Apify Badge](https://apify.com/actor-badge?actor=mcp-server/flightradar24-mcp-server)](https://apify.com/mcp-server/flightradar24-mcp-server)
10+
11+
## Connection URL
12+
MCP clients can connect to this server at:
13+
14+
```text
15+
https://mcp-servers--flightradar24-mcp-server.apify.actor/mcp
16+
```
17+
18+
## Client Configuration
19+
To connect to this MCP server, use the following configuration in your MCP client:
20+
21+
```json
22+
{
23+
"mcpServers": {
24+
"flightradar24": {
25+
"url": "https://mcp-servers--flightradar24-mcp-server.apify.actor/mcp",
26+
"headers": {
27+
"Authorization": "Bearer YOUR_APIFY_TOKEN"
28+
}
29+
}
30+
}
31+
}
32+
```
33+
34+
**Note:** Replace `YOUR_APIFY_TOKEN` with your actual Apify API token. You can find your token in the [Apify Console](https://console.apify.com/account/integrations).
35+
36+
## 🚩 Claim this MCP server
37+
All credits to the original authors of <https://github.com/sunsetcoder/flightradar24-mcp-server>
38+
To claim this server, please write to [[email protected]](mailto:[email protected]).
39+
40+
---
41+
42+
## Available tools
43+
44+
- **get_flight_positions**: Get real-time flight positions with various filtering options (airports, bounds, categories, limit)
45+
- **get_flight_eta**: Get estimated arrival time for a specific flight (by flight number)
46+
47+
## References
48+
To learn more about Apify and Actors, take a look at the following resources:
49+
- [Apify SDK for JavaScript documentation](https://docs.apify.com/sdk/js)
50+
- [Apify SDK for Python documentation](https://docs.apify.com/sdk/python)
51+
- [Apify Platform documentation](https://docs.apify.com/platform)
52+
- [Apify MCP Server](https://docs.apify.com/platform/integrations/mcp)
53+
- [Webinar: Building and Monetizing MCP Servers on Apify](https://www.youtube.com/watch?v=w3AH3jIrXXo)
54+
- [Join our developer community on Discord](https://discord.com/invite/jyEM2PRvMU)
55+
56+
---
57+
58+
For the full MCP server source code and more details, see the [mcp-servers GitHub repository](https://github.com/apify/mcp-servers).
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import prettier from 'eslint-config-prettier';
2+
3+
import apify from '@apify/eslint-config/ts.js';
4+
import globals from 'globals';
5+
import tsEslint from 'typescript-eslint';
6+
7+
// eslint-disable-next-line import/no-default-export
8+
export default [
9+
{ ignores: ['**/dist', 'eslint.config.mjs'] },
10+
...apify,
11+
prettier,
12+
{
13+
languageOptions: {
14+
parser: tsEslint.parser,
15+
parserOptions: {
16+
project: 'tsconfig.json',
17+
},
18+
globals: {
19+
...globals.node,
20+
...globals.jest,
21+
},
22+
},
23+
plugins: {
24+
'@typescript-eslint': tsEslint.plugin,
25+
},
26+
rules: {
27+
'no-console': 0,
28+
},
29+
},
30+
];
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Flightradar24 API Configuration
2+
FR24_API_KEY=your-api-key-here
3+
# Flightradar24 API URL, shouldn't need to change this
4+
FR24_API_URL=https://fr24api.flightradar24.com
5+
# Server Configuration
6+
PORT=3000

0 commit comments

Comments
 (0)