Aerset MCP
An MCP server that provides access to Aerset's live catalog of Spanish drone regulations, allowing agents to query specific rules, permits, and airspace restrictions with cited sources and review dates for compliance verification.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.aerset.com/mcpWhat its tools do
5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to aerset.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Query specific Spanish drone regulations and permit requirements
- Verify airspace restrictions and protected area rules
- Retrieve cited sources and review dates for legal compliance
Source and maintenance
Protocol and capabilities
- Server
- aerset 0.1.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 5 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
search_regulation — Buscar en la normativa
Busca en el corpus normativo de drones de España: BOE, Reglamento (UE) 2019/947, guías de AESA y EASA, y MITECO. Devuelve PASAJES literales con el título del documento, su URL y su fecha — no un resumen y no una conclusión. Úsalo para citar la norma con su fuente y su fecha. Lo que no consta en estas fuentes se cita como «en nuestras fuentes no consta X», nunca como una ausencia en el mundo. Para saber qué trámites exige un vuelo concreto, usa `flight_requirements`. · Searches Aerset's sourced corpus of Spanish drone regulation and returns literal passages, each with its document title, URL and vintage. Retrieval only: nothing is summarised and no conclusion is drawn. Quote a passage with its source and its date; an absence from the corpus is an absence from our sources and says nothing about the world.
{
"type": "object",
"title": "search_regulationArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 6
},
"query": {
"type": "string",
"title": "Query"
}
}
}{
"type": "object",
"$defs": {
"Passage": {
"type": "object",
"title": "Passage",
"required": [
"title",
"source",
"text"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url",
"default": null
},
"text": {
"type": "string",
"title": "Text"
},
"title": {
"type": "string",
"title": "Title"
},
"source": {
"type": "string",
"title": "Source"
},
"vintage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Vintage",
"default": null
}
}
}
},
"title": "RegulationAnswer",
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Note",
"default": null
},
"query": {
"type": "string",
"title": "Query",
"default": ""
},
"passages": {
"type": "array",
"items": {
"$ref": "#/$defs/Passage"
},
"title": "Passages"
},
"available": {
"type": "boolean",
"title": "Available",
"default": true
},
"checked_at": {
"type": "string",
"title": "Checked At",
"format": "date-time"
},
"disclaimer": {
"type": "string",
"title": "Disclaimer",
"default": "Orientación con fuentes, no autorización. Aerset no concede permisos ni los tramita. La última palabra la tienen AESA y el visor oficial de ENAIRE, y cada decisión operativa se consulta con la autoridad antes del vuelo."
},
"attribution": {
"type": "string",
"title": "Attribution",
"default": "Fuentes: BOE, Reglamento (UE) 2019/947, guías de AESA y EASA, ENAIRE (servAIS, ED-318) y MITECO/IEPNB. Cada pasaje y cada regla lleva la suya con su fecha."
},
"corpus_documents": {
"type": "integer",
"title": "Corpus Documents",
"default": 0
},
"invalid_arguments": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Invalid Arguments",
"default": null
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}flight_requirements — Trámites que exige un vuelo
Calcula, con el motor determinista de Aerset, qué trámites exige la normativa para volar en un punto de España, en una fecha y con una aeronave concreta: qué régimen de la categoría abierta aplica por peso y marcado de clase, qué zonas UAS publica ENAIRE sobre el punto, qué espacios protegidos constan en MITECO y quién autoriza cada cosa, con el plazo que el catálogo atribuye a cada trámite. Cada línea nombra la autoridad que la exige y la fuente con su fecha de revisión. NO concede permisos, no tramita nada y no afirma que la operación pueda realizarse: el campo `not_covered` enumera las fuentes que esta respuesta no consulta (NOTAM, terreno, obstáculos, meteo). La decisión es del operador y se consulta con AESA. · Runs Aerset's deterministic permit engine over a point, a date and an aircraft in Spain and returns the requirement list: the open-category regime for that weight and class marking, the UAS zones ENAIRE publishes over the point, the protected areas MITECO records, and who demands each item with the lead time our catalogue attributes to it. It grants nothing and files nothing; `not_covered` names the sources it does not consult, and the decision stays with the operator and the authority.
{
"type": "object",
"title": "flight_requirementsArguments",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"title": "Lat"
},
"lon": {
"type": "number",
"title": "Lon"
},
"date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Date",
"default": null
},
"night": {
"type": "boolean",
"title": "Night",
"default": false
},
"environment": {
"type": "string",
"title": "Environment",
"default": "RURAL"
},
"class_marking": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Class Marking",
"default": null
},
"drone_weight_g": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Drone Weight G",
"default": null
}
}
}{
"type": "object",
"title": "RequirementsAnswer",
"properties": {
"lat": {
"type": "number",
"title": "Lat",
"default": 0
},
"lon": {
"type": "number",
"title": "Lon",
"default": 0
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Note",
"default": null
},
"zones": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Zones"
},
"regime": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Regime",
"default": null
},
"covered": {
"type": "boolean",
"title": "Covered",
"default": true
},
"for_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "For Date",
"default": null
},
"available": {
"type": "boolean",
"title": "Available",
"default": true
},
"checked_at": {
"type": "string",
"title": "Checked At",
"format": "date-time"
},
"disclaimer": {
"type": "string",
"title": "Disclaimer",
"default": "Orientación con fuentes, no autorización. Aerset no concede permisos ni los tramita. La última palabra la tienen AESA y el visor oficial de ENAIRE, y cada decisión operativa se consulta con la autoridad antes del vuelo."
},
"viewer_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Viewer Url",
"default": null
},
"attribution": {
"type": "string",
"title": "Attribution",
"default": "Fuentes: BOE, Reglamento (UE) 2019/947, guías de AESA y EASA, ENAIRE (servAIS, ED-318) y MITECO/IEPNB. Cada pasaje y cada regla lleva la suya con su fecha."
},
"not_covered": {
"type": "array",
"items": {
"type": "string"
},
"title": "Not Covered"
},
"requirements": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Requirements"
},
"protected_areas": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Protected Areas"
},
"zones_available": {
"type": "boolean",
"title": "Zones Available",
"default": true
},
"invalid_arguments": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Invalid Arguments",
"default": null
},
"judged_at_height_m": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Judged At Height M",
"default": null
},
"protected_available": {
"type": "boolean",
"title": "Protected Available",
"default": true
},
"nearest_aerodrome_km": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Nearest Aerodrome Km",
"default": null
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}uas_zones — Zonas UAS de ENAIRE en un rectángulo
Devuelve los polígonos de las zonas geográficas UAS que ENAIRE publica dentro de un rectángulo, con el tipo de cada una, sus límites vertical inferior y superior y la fecha en que ENAIRE la actualizó. Es la capa que pinta un mapa, no un veredicto sobre un punto: para eso está `flight_requirements`. Una lista vacía significa que la consulta a ENAIRE no devolvió ninguna zona para ese rectángulo, y `available: false` significa que no se pudo consultar — ni la una ni la otra describen el cielo. El visor oficial de ENAIRE tiene la última palabra. · Returns the UAS geographical zones ENAIRE publishes inside a bounding box, each with its kind, its vertical limits and ENAIRE's own update date. It is a map layer and not a verdict about a point. An empty list means our query to ENAIRE returned nothing for that rectangle; `available: false` means the query did not happen. ENAIRE's official viewer has the last word.
{
"type": "object",
"title": "uas_zonesArguments",
"required": [
"bbox"
],
"properties": {
"bbox": {
"type": "string",
"title": "Bbox"
}
}
}{
"type": "object",
"title": "ZonesAnswer",
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Note",
"default": null
},
"zones": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Zones"
},
"available": {
"type": "boolean",
"title": "Available",
"default": true
},
"truncated": {
"type": "boolean",
"title": "Truncated",
"default": false
},
"checked_at": {
"type": "string",
"title": "Checked At",
"format": "date-time"
},
"disclaimer": {
"type": "string",
"title": "Disclaimer",
"default": "Orientación con fuentes, no autorización. Aerset no concede permisos ni los tramita. La última palabra la tienen AESA y el visor oficial de ENAIRE, y cada decisión operativa se consulta con la autoridad antes del vuelo."
},
"viewer_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Viewer Url",
"default": null
},
"attribution": {
"type": "string",
"title": "Attribution",
"default": "Fuentes: BOE, Reglamento (UE) 2019/947, guías de AESA y EASA, ENAIRE (servAIS, ED-318) y MITECO/IEPNB. Cada pasaje y cada regla lleva la suya con su fecha."
},
"invalid_arguments": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Invalid Arguments",
"default": null
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}spots_near — Puntos de vuelo cerca
Busca puntos de vuelo cerca de una coordenada, de la comunidad de pilotos de Aerset: nombre, coordenada, tipo de dron al que va bien y la dificultad que se le comprobó, con la fecha de esa comprobación. Es conocimiento de la comunidad y NO una fuente oficial: dice adónde va la gente, no qué exige la norma. Que un punto figure aquí no dice nada sobre el espacio aéreo de hoy — la dificultad es la del día en que se comprobó y no se recalcula—, así que los trámites los contesta `flight_requirements` y la última palabra la tienen AESA y el visor oficial de ENAIRE. · Finds flying spots near a coordinate from Aerset's pilot community, with the difficulty each one was checked at and the date of that check. Community knowledge, not an official source: it says where people go and nothing about what the regulation demands. A spot appearing here says nothing about today's airspace — its difficulty is the day it was checked and is never recomputed — so ask `flight_requirements` for the paperwork, and the authority and ENAIRE's official viewer have the last word.
{
"type": "object",
"title": "spots_nearArguments",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"title": "Lat"
},
"lon": {
"type": "number",
"title": "Lon"
},
"radius_km": {
"type": "number",
"title": "Radius Km",
"default": 25
}
}
}{
"type": "object",
"title": "SpotsAnswer",
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Note",
"default": null
},
"spots": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Spots"
},
"available": {
"type": "boolean",
"title": "Available",
"default": true
},
"checked_at": {
"type": "string",
"title": "Checked At",
"format": "date-time"
},
"disclaimer": {
"type": "string",
"title": "Disclaimer",
"default": "Orientación con fuentes, no autorización. Aerset no concede permisos ni los tramita. La última palabra la tienen AESA y el visor oficial de ENAIRE, y cada decisión operativa se consulta con la autoridad antes del vuelo."
},
"note_on_verdicts": {
"type": "string",
"title": "Note On Verdicts",
"default": "La dificultad de cada punto es la del día en que se comprobó, y esa fecha viaja con el punto; sin fecha, está sin comprobar. No se recalcula sola."
},
"invalid_arguments": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Invalid Arguments",
"default": null
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}rules_catalogue — Catálogo de trámites
Devuelve el catálogo completo de trámites que Aerset mantiene para volar un dron en España, regla a regla: su código, su título, la autoridad que la exige, las condiciones en las que aplica, el plazo que le atribuimos y si ese plazo está comprobado contra la fuente o no, más la URL de la fuente y la fecha en que se revisó. Es el conjunto sobre el que trabaja `flight_requirements`, publicado para poder citarlo entero. Una regla sin `reviewed_at` no dice nada, y con `lead_time_verified: false` el plazo NO está comprobado. · Returns Aerset's whole catalogue of Spanish drone paperwork, rule by rule: code, title, the authority that demands it, the conditions under which it applies, the lead time we attribute to it and whether that lead time has been checked against the source, plus the source URL and the review date. It is the set `flight_requirements` evaluates, published so it can be cited whole.
{
"type": "object",
"title": "rules_catalogueArguments",
"properties": {}
}{
"type": "object",
"title": "RulesAnswer",
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Note",
"default": null
},
"rules": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Rules"
},
"licence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Licence",
"default": null
},
"available": {
"type": "boolean",
"title": "Available",
"default": true
},
"checked_at": {
"type": "string",
"title": "Checked At",
"format": "date-time"
},
"disclaimer": {
"type": "string",
"title": "Disclaimer",
"default": "Orientación con fuentes, no autorización. Aerset no concede permisos ni los tramita. La última palabra la tienen AESA y el visor oficial de ENAIRE, y cada decisión operativa se consulta con la autoridad antes del vuelo."
},
"attribution": {
"type": "string",
"title": "Attribution",
"default": "Fuentes: BOE, Reglamento (UE) 2019/947, guías de AESA y EASA, ENAIRE (servAIS, ED-318) y MITECO/IEPNB. Cada pasaje y cada regla lleva la suya con su fecha."
},
"licence_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Licence Url",
"default": null
},
"reviewed_through": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reviewed Through",
"default": null
},
"invalid_arguments": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Invalid Arguments",
"default": null
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}Prompts
0 advertised
Resources
0 advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
- 2026-11-09: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 2421 ms
- 95th percentile latency
- 2421 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2421 ms · metadata changed · 5 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http aerset-mcp https://mcp.aerset.com/mcpCodex
codex mcp add aerset-mcp --url https://mcp.aerset.com/mcpCursor
{
"mcpServers": {
"aerset-mcp": {
"url": "https://mcp.aerset.com/mcp"
}
}
}Cline
{
"mcpServers": {
"aerset-mcp": {
"type": "streamableHttp",
"url": "https://mcp.aerset.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"aerset-mcp": {
"type": "http",
"url": "https://mcp.aerset.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http aerset-mcp https://mcp.aerset.com/mcpClaude Desktop
https://mcp.aerset.com/mcpWindsurf
{
"mcpServers": {
"aerset-mcp": {
"serverUrl": "https://mcp.aerset.com/mcp"
}
}
}Let your agent find its tools
Find servers like Aerset MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Aerset MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.