{
  "name": "agroreports",
  "description": "Field reports, threshold alerts and the field data underneath. The agent can generate a report, create or update an alert rule, and read triggered events with provenance.",
  "version": "0.1.0-beta",
  "homepage": "https://www.agroreports.org/mcp/",
  "documentation": "https://www.agroreports.org/mcp/",
  "transport": {
    "type": "streamable-http",
    "url": "https://mcp.agroreports.org/mcp"
  },
  "authentication": {
    "type": "oauth2",
    "authorizationServer": "https://mcp.agroreports.org",
    "pkce": true
  },
  "capabilities": {
    "tools": true,
    "resources": true,
    "prompts": true,
    "reports": true,
    "alerts": true
  },
  "tools": [
    {
      "name": "list_report_types",
      "description": "The eight report types with indices, timeframe and description.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "generate_report",
      "description": "Start a full field report. Returns a report id and status. All eight report types are available.",
      "inputSchema": {
        "type": "object",
        "required": [
          "geometry",
          "reportType"
        ],
        "properties": {
          "geometry": {
            "type": "object"
          },
          "reportType": {
            "type": "string"
          },
          "lang": {
            "type": "string",
            "enum": [
              "en",
              "fr",
              "es",
              "pt",
              "de"
            ]
          },
          "fireDate": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "get_report",
      "description": "Poll a report and return its status, written text, PDF and CSV links.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "create_alert",
      "description": "Create a threshold rule on an index for a field or portfolio, with a window and channels.",
      "inputSchema": {
        "type": "object",
        "required": [
          "field",
          "index",
          "condition",
          "threshold",
          "window",
          "channels"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "index": {
            "type": "string",
            "enum": [
              "ndvi",
              "ndmi",
              "nbr",
              "ndre",
              "ndwi"
            ]
          },
          "condition": {
            "type": "string",
            "enum": [
              "below",
              "above"
            ]
          },
          "threshold": {
            "type": "number"
          },
          "window": {
            "type": "object"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "webhook_url": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "list_alerts",
      "description": "List alert rules with status, threshold, window and last event.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "update_alert",
      "description": "Update a rule's threshold, window, channels or paused state.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "threshold": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "armed",
              "paused"
            ]
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    {
      "name": "get_alert_events",
      "description": "Read triggered events for a rule, with the index value, scene, valid-pixel share and delivery channels.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "list_indices",
      "description": "Catalog of the eight satellite indices: formula, bands, range, thresholds and typical use.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "get_indices",
      "description": "Current index values for a field polygon from the latest clear scene, with scene date and valid-pixel share.",
      "inputSchema": {
        "type": "object",
        "required": [
          "geometry"
        ],
        "properties": {
          "geometry": {
            "type": "object"
          },
          "indices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "date": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "get_index_timeseries",
      "description": "Index history for a field over 1\u201310 years, season by season.",
      "inputSchema": {
        "type": "object",
        "required": [
          "geometry"
        ],
        "properties": {
          "geometry": {
            "type": "object"
          },
          "indices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "startDate": {
            "type": "string"
          },
          "endDate": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "compute_burn_severity",
      "description": "Pre-fire NBR, post-fire NBR, dNBR and a USGS burn-severity class around a fire date.",
      "inputSchema": {
        "type": "object",
        "required": [
          "geometry",
          "fireDate"
        ],
        "properties": {
          "geometry": {
            "type": "object"
          },
          "fireDate": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "find_location",
      "description": "Resolve a place name or coordinate to a bounding box.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string"
          },
          "lat": {
            "type": "number"
          },
          "lon": {
            "type": "number"
          }
        }
      }
    }
  ],
  "limits": {
    "maxAreaHa": 200,
    "maxIndices": 8,
    "maxYears": 10,
    "maxVertices": 500,
    "sharedQuotaWithRest": true
  }
}
