fortyguard-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FORTYGUARD_API_KEY | Yes | Required. Never logged or written to disk by this server. | |
| FORTYGUARD_BASE_URL | No | API endpoint. Must be https unless it is loopback. | https://api.fortyguard.com |
| FORTYGUARD_DATA_DIR | No | Where results and reports are stored. | |
| FORTYGUARD_ENV_FILE | No | Path to an environment file to load, as an explicit opt-in. | |
| FORTYGUARD_LOG_LEVEL | No | Diagnostics to stderr as JSON lines, credentials redacted. | INFO |
| FORTYGUARD_POLL_TIMEOUT_S | No | Ceiling on any single wait. | 600 |
| FORTYGUARD_REPORT_MAX_BYTES | No | Ceiling on what one download may write to disk. | 104857600 |
| FORTYGUARD_REPORT_TIMEOUT_S | No | Ceiling on a report download. | 120 |
| FORTYGUARD_MAX_STORAGE_BYTES | No | Optional archive cap for CI/containers. | |
| FORTYGUARD_INLINE_TOKEN_BUDGET | No | Above this, format="auto" summarises rather than inlines. | 25000 |
| FORTYGUARD_COORDINATE_PRECISION | No | Decimal places in compact encoding (~1 m). | 5 |
| FORTYGUARD_REPORT_ALLOW_PRIVATE_HOSTS | No | Allow report downloads from private/loopback addresses. Only for self-hosted storage. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_credit_usageA | Your account's plan, credit balance, and per-endpoint usage breakdown, straight from the API. This is the authority on what your key can do - area limits and endpoint access vary by plan and are not assumed anywhere in this server. |
| get_storage_infoA | What this server has archived on local disk: how many results, broken down by endpoint, how much space they take, any report files downloaded from signed URLs, and where all of it lives. Nothing is ever deleted automatically - stored results cost money and never go stale, so the directory is yours to manage. |
| validate_aoiA | Measure a GeoJSON area of interest locally: geodesic area in km2 and square miles, bounding box, edge lengths, ring closure, and whether the coordinates look transposed. Costs nothing and makes no API call. It reports only - no size limit is applied, because limits vary by plan. |
| split_aoiA | Cut an area of interest into a grid of smaller areas, each at or under a maximum size you specify. Use it when the API rejects an area as too large. There is no default maximum: the cap depends on your plan, so take it from your contract or from the API's own rejection message. Local computation, no credits. |
| submit_heatmapA | Submit a temperature heatmap over an area and return immediately with an activity_id, without waiting for it to finish. Use this when you have other work to do, or for a large area. Collect it with check_status. If this exact request was run before, the stored result comes back straight away instead of an activity_id, marked from_archive, and costs nothing. filter_type: 1 = single hour (start_date + start_time); 2 = range of hours, same day (start_date + start_time + end_time); 3 = single day (start_date only); 4 = range of days (start_date + end_date). granularity is the tile edge in metres (60, 80, 100); omit it to let the API choose. analytic_type is optional (tcm, time_of_measure, exceedance, persistence); omit it for plain temperature. start_time is interpreted as local time at the area of interest, not UTC. |
| create_heatmapA | Run a temperature heatmap and wait for the result inline. Measured heatmaps take 21-38 seconds. If the wait runs out you get the activity_id back and nothing is lost - the job keeps running and check_status collects it. An identical earlier request is served from the local archive for free. filter_type: 1 = single hour (start_date + start_time); 2 = range of hours, same day (start_date + start_time + end_time); 3 = single day (start_date only); 4 = range of days (start_date + end_date). granularity is the tile edge in metres (60, 80, 100); omit it to let the API choose. analytic_type is optional (tcm, time_of_measure, exceedance, persistence); omit it for plain temperature. start_time is interpreted as local time at the area of interest, not UTC. |
| get_env_paramsA | Environmental parameters at a single point - humidity, heat index, wet bulb, air quality and more. Requires a temperature, which must match the heatmap for the same place and time. Supply it either as temperature=, or as from_activity_id= naming a completed heatmap covering this point, which also supplies the matching date. Give one or the other, not both. Narrow the response with analysis=, or omit it to receive every parameter. |
| submit_satelliteA | Submit satellite land-cover segmentation for a point and return an activity_id. Collect it with check_status. |
| submit_streetviewA | Submit street-view scene analysis for a point and return an activity_id. Collect it with check_status. |
| submit_heat_intelligenceA | Submit a heat intelligence report for a point and return an activity_id. This one is slow - measured at about 395 seconds - so it is never waited on inline. Collect it with check_status, which downloads the PDF to local disk and returns its path under 'report'; the API delivers this analysis as a short-lived signed URL, which is never returned or stored. Needs a temperature: give temperature= or from_activity_id=, not both. |
| check_statusA | Check on a submitted analysis, or wait for it. If it has finished, the result comes back and is archived locally. Polling is free and the job runs whether or not you poll. Once collected, calling this again is served from disk at no cost. |
| get_result_sliceA | Read part or all of an already-collected result from local disk. Costs nothing and makes no API call, so use it freely: take the hottest tiles with top_n, a sub-area with bbox, a downsample with every_nth, the whole thing compactly with format='columnar', or the untouched payload with format='geojson'. Naming a format gets you all of it at whatever size it comes to; the context budget applies only to the default format='auto'. Statistics for both the slice and the full result are always reported, so a slice maximum is never mistaken for the real one. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Account usage | This API key's plan, credit balance and endpoint breakdown. |
| Local archive | What this server has stored on disk and what it cost. |
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/MohamedXAdel/fortyguard-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server