Georgia Prisoners' Speak Public Data
REMOTE · DATA.GPS.PRESS · SCANNED OCT 3
Read-only public data on Georgia's prisons: population, facilities, deaths, contraband, statutes.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security74
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3263 tokens (~148/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Georgia Prisoners' Speak Public Data MCP server?
Georgia Prisoners' Speak Public Data is a hosted endpoint at https://data.gps.press/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · data.gps.press
claude mcp add --transport http press-gps-gps-public-data 'https://data.gps.press/mcp'
{
"mcpServers": {
"press-gps-gps-public-data": {
"url": "https://data.gps.press/mcp"
}
}
} {
"servers": {
"press-gps-gps-public-data": {
"type": "http",
"url": "https://data.gps.press/mcp"
}
}
} [mcp_servers.press-gps-gps-public-data] url = "https://data.gps.press/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"press-gps-gps-public-data": {
"type": "remote",
"url": "https://data.gps.press/mcp",
"enabled": true
}
}
} openclaw mcp add press-gps-gps-public-data --url 'https://data.gps.press/mcp' --transport streamable-http
mcp_servers:
press-gps-gps-public-data:
url: "https://data.gps.press/mcp" {
"McpServers": {
"press-gps-gps-public-data": {
"Transport": "http",
"Url": "https://data.gps.press/mcp"
}
}
} assistant mcp add press-gps-gps-public-data -t streamable-http -u 'https://data.gps.press/mcp'
{
"mcpServers": {
"press-gps-gps-public-data": {
"type": "http",
"url": "https://data.gps.press/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Sept 26 0
- Tool “get_contraband_incidents” rewrote its description, which is the text the model reads security
- Tool “get_historical_series” rewrote its description, which is the text the model reads security
- Tool “get_length_of_stay” rewrote its description, which is the text the model reads security
- Tool “get_parole_statistics” rewrote its description, which is the text the model reads security
- Tool “list_facilities” rewrote its description, which is the text the model reads security
- Tool “list_intelligence” rewrote its description, which is the text the model reads security
- Schema quality: 133 → 148 ▼ functional
- “get_historical_series” added an optional parameter “limit” cosmetic
- “get_historical_series” added an optional parameter “offset” cosmetic
- “get_length_of_stay” added an optional parameter “limit” cosmetic
- “get_length_of_stay” added an optional parameter “offset” cosmetic
- “get_parole_statistics” added an optional parameter “from_year” cosmetic
- “get_parole_statistics” added an optional parameter “limit” cosmetic
- “get_parole_statistics” added an optional parameter “metric” cosmetic
- “get_parole_statistics” added an optional parameter “offset” cosmetic
- “get_parole_statistics” added an optional parameter “to_year” cosmetic
- “list_facilities” added an optional parameter “limit” cosmetic
- “list_facilities” added an optional parameter “offset” cosmetic
- 29 Sept 26 0
- Schema quality: 2426 → 2942 ▼ functional
- Schema quality: excellent → good functional
- New tool “get_historical_events” functional
- New tool “get_historical_series” functional
- New tool “list_historical_series” functional
- New tool “search_historical_data” functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Sept 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 0
- Tool “get_contraband_incidents” rewrote its description, which is the text the model reads security
- 23 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Oct 2026 · Probed https://data.gps.press/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=data.gps.press | CN=YE2,O=Let's Encrypt,C=US | 25 Aug 2026 | 23 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 5ed6b95b0b0574b0e4a3ac405bf140c9739 |
| SANs: data.gps.press | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of data.gps.press. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| press. | present | 24159 | 13 | Verified |
| gps.press. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://data.gps.press/mcp | Verified | 200 | |
| http (plaintext) | http://data.gps.press/mcp | HTTPS enforced | 301 | https://data.gps.press/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_contraband_incidents Get contraband incidents ~317
Incidents from GDC's own published contraband arrest reports (2010-present, ~1,600 incidents, including reports that survive only in the Internet Archive; page: gps.press/contraband-data/): one row per incident with GDC's wording verbatim, the people as GDC categorised them (staff / officer / contract staff / visitor / civilian), the items, whether an arrest was reported, and the GDC source URL. Filters: facility slug (e.g. dooly-state-prison), year, actor_category (staff | visitor | civilian | officer | gdc_staff | contract_staff), item_category (cellphone, tobacco, marijuana, methamphetamine, ...), arrest_made (yes|no|unstated), q (text match). Structured rows name staff, officers and contract staff as GDC printed them; other people appear by category and role only. The narrative is GDC's own text. Rows are long (a few thousand characters each): per_page defaults to 5 and is capped at 20; use `page` to continue and the filters to narrow. `total` is the number of matches.
| Name | Type | Req | Description |
|---|---|---|---|
| actor_category | string | – | – |
| arrest_made | string | – | – |
| facility | string | – | – |
| item_category | string | – | – |
| page | integer | – | – |
| per_page | integer | – | – |
| q | string | – | – |
| year | integer | – | – |
No output schema declared.
No examples provided.
get_contraband_summary Get contraband summary ~109
Summaries of GDC's published contraband arrest reports. `by` = year | facility | actor-category | role | item-category | stats. Optional facility slug / year filters (not for stats). Counts arrests as GDC reported them; GDC's own running tally is not used because it is not a consistent series across copies of the same report.
| Name | Type | Req | Description |
|---|---|---|---|
| by | string | – | – |
| facility | string | – | – |
| year | integer | – | – |
No output schema declared.
No examples provided.
get_drug_admissions Get drug admissions ~38
Admissions to Georgia prisons on drug offenses for the latest published report year, broken down by sex, age band and related measures.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_facility Get facility ~69
One facility's full public record plus its most recent state health inspection, if GPS has one. `slug` is the facility's gps.press slug, e.g. 'macon-state-prison'. Use list_facilities to find it.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | – |
No output schema declared.
No examples provided.
get_facility_staff_roster Get facility staff roster ~255
Staff headcount and list for one GDC facility, from a GDC-produced roster. Answers "how many staff work at X", "how many officers work there", "list the staff at X". `slug` is the facility slug, e.g. 'dooly-state-prison' (use list_facilities to find it). `title` optionally filters by job title. GDC abbreviates heavily: correctional officers appear as "Correctional Ofc", clerical staff as "Admin Support" or "Admin Assistant". Try both the plain word and the abbreviation. ALWAYS report the `observed` date alongside any figure from this tool. A roster is a single-day observation, not a statement about who works there today. A zero for a role is a finding about the roster rather than missing data: the roster holds no nursing, physician or dental titles anywhere in GDC, which is consistent with medical staffing being contracted rather than directly employed. Do not assert that reason as established fact.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| slug | string | yes | – |
| title | string | – | – |
No output schema declared.
No examples provided.
get_gps_guide Get gps guide ~109
GPS's orientation file for AI clients (llms.txt) — READ THIS FIRST. Carries the things the data tools cannot: which figure to lead with when two are defensible, how to label budget figures, the exact date of the DOJ findings report, and the claims GPS has publicly corrected and will not repeat. Roughly 2,000 words. The datasets give you accurate numbers. This is what keeps the sentence around the number accurate too.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_historical_events Get historical events ~130
Dated changes to Georgia parole and sentencing rules and the court rulings on them, 1908-present (the 1979 guidelines grid, the 1994-95 Sentence Reform Act, the 1998 90% policy, the 2005 Fulton order voiding it, the 2006 and 2008 changes, HB 1176 in 2012), each with its source and quote. topic = parole | sentencing | court.
| Name | Type | Req | Description |
|---|---|---|---|
| from_year | integer | – | – |
| to_year | integer | – | – |
| topic | string | – | – |
No output schema declared.
No examples provided.
get_historical_series Get historical series ~211
One GPS Historical Data series by year: every value with the source's own label, the source (publisher, title, page, URL) and the exact quote it was checked against, plus the series' definition BREAKS (never read one trend across a break). Get slugs from list_historical_series, e.g. deaths-bjs-state-prisons, homicides-gdc-via-doj, los-pct-released-on-parole-gdc, population-yearend-gdc-series, deaths-gps-registry (live). CSV: add ?format=csv to the REST URL. Values are paged (`limit` default 25, `offset`); narrow with from_year/to_year/category/subgroup.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | – |
| from_year | integer | – | – |
| limit | integer | – | – |
| offset | integer | – | – |
| slug | string | yes | – |
| subgroup | string | – | – |
| to_year | integer | – | – |
No output schema declared.
No examples provided.
get_length_of_stay Get length of stay ~218
How long people actually serve in Georgia, by offense and year: average sentence, years served, percentage of sentence served, share released on parole, and the lifer figures — plus the trend summary. `offense` is a case-insensitive substring of GDC's offense name (e.g. 'murder', 'burglary', 'drug'; also the four-digit offense code). With no `offense` the all-crimes series is returned. `year` is the calendar year of release (e.g. '2023'). Both filter on this server. Rows are newest year first and paged: `limit` (default 30) and `offset`; `matched_offenses` lists what `offense` matched. `summary_only` returns just the summary block.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| offense | string | – | – |
| offset | integer | – | – |
| summary_only | boolean | – | – |
| year | string | – | – |
No output schema declared.
No examples provided.
get_mortality_data Get mortality data ~179
Deaths in GDC custody since 2020 — yearly and monthly counts, cause-of- death breakdown, deaths by facility, facility type, security level and age. With no arguments this returns the whole published document plus a list of its sections. `section` returns one section by name (e.g. 'YEARLY STATISTICS', 'DEATHS BY FACILITY'); `year` filters the yearly and monthly lines to that year; `facility_contains` filters the by-facility ranking AND returns that facility's cause-of-death breakdown. Filters are matched against the published lines, which is why the matching lines are returned verbatim rather than re-tabulated.
| Name | Type | Req | Description |
|---|---|---|---|
| facility_contains | string | – | – |
| section | string | – | – |
| year | string | – | – |
No output schema declared.
No examples provided.
get_ocga_section Get ocga section ~83
Full text of a section of the Official Code of Georgia Annotated from GPS's public mirror. `section` is the bare citation without the 'O.C.G.A. §' prefix, e.g. '9-14-42', '42-5-2', '17-9-4'.
| Name | Type | Req | Description |
|---|---|---|---|
| section | string | yes | – |
No output schema declared.
No examples provided.
get_page Get page ~176
Read any gps.press page as clean Markdown. Every page on the site has a Markdown twin at the same URL with `.md` appended; this fetches it. Accepts a full URL, a path, or a bare slug — '/vision2027/', 'vision2027', and the full https URL all work, with or without '.md'. Covers articles, data pages, campaign pages and the intelligence briefings (intelligence/facility/{slug}, intelligence/issue/{slug}). Long pages are truncated; use `offset` and `limit` to page through one. Pair with search_site() to find a page, then read it here rather than guessing its contents.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| offset | integer | – | – |
| path | string | yes | – |
No output schema declared.
No examples provided.
get_parole_statistics Get parole statistics ~149
Georgia parole decisions by year — the series GPS assembled from the State Board of Pardons and Paroles' own annual reports, with the metric definitions and the instruments note that says how they were built. `metric` (exact name from the `metrics` list, e.g. 'cases_considered'), `from_year` / `to_year` (fiscal years) filter the series. Paged: `limit` (default 100 rows) and `offset`.
| Name | Type | Req | Description |
|---|---|---|---|
| from_year | integer | – | – |
| limit | integer | – | – |
| metric | string | – | – |
| offset | integer | – | – |
| to_year | integer | – | – |
No output schema declared.
No examples provided.
get_population_snapshot Get population snapshot ~79
Latest GDC population snapshot (the weekly 'Friday report'): `total_in_gdc_custody` (every GDC bed type, including probation detention centers and RSAT), the jail backlog, and the facility-type components. The total is the ONLY population figure; the components are parts of it, not alternative totals.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_settlements_data Get settlements data ~45
What Georgia has paid to settle prison death and injury claims — the 'What Georgia Pays' analysis of state settlement records, returned as the published markdown.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_system_statistics Get system statistics ~46
Headline statistics for the Georgia prison system: population, mortality, demographics, facility counts, releases and health measures, with the update date and data source GPS assembled them from.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_facilities List facilities ~153
List Georgia prison facilities with location, operator, security level, capacity, population, warden and latest food-safety score. Optional filters are applied to the public list after it is fetched: facility_type (e.g. 'State Prison', 'Transitional Center', 'County Prison'), county, name_contains, and active_only. Responses are paged: `limit` (default 25) and `offset`; `next_offset` says where the rest begins.
| Name | Type | Req | Description |
|---|---|---|---|
| active_only | boolean | – | – |
| county | string | – | – |
| facility_type | string | – | – |
| limit | integer | – | – |
| name_contains | string | – | – |
| offset | integer | – | – |
No output schema declared.
No examples provided.
list_historical_series List historical series ~159
GPS Historical Data (page: gps.press/historical-data/): the catalog of yearly series on Georgia's prisons, 1925-present. Each series is ONE publisher's measure (GDC and Board of Corrections annual reports, the Bureau of Justice Statistics, the State Board of Pardons and Paroles, DOJ, the AJC, UCLA Law Behind Bars, the GPS mortality registry) with its definition, coverage and caveats. Topics: deaths, homicides, suicides, violence, use_of_force, weapons, parole, time_served, lifers, population, capacity, budget, escapes, staffing. Never splice two publishers' series into one trend.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | – |
No output schema declared.
No examples provided.
list_intelligence List intelligence ~124
List GPS intelligence briefings — per-facility and per-issue analyses. `kind` filters to 'facility' or 'issue'; `contains` filters on the slug. Read any of them in full with get_page(), e.g. get_page('intelligence/facility/dooly-state-prison'). Both kinds are discovered from GPS's public intelligence index pages; if the issue hub cannot be read, `issues_note` says so in the payload.
| Name | Type | Req | Description |
|---|---|---|---|
| contains | string | – | – |
| kind | string | – | – |
No output schema declared.
No examples provided.
search_historical_data Search historical data ~56
Find GPS Historical Data series and dated rule changes by words, e.g. "homicide", "parole", "life", "AIDS", "population", "90%".
| Name | Type | Req | Description |
|---|---|---|---|
| q | string | yes | – |
No output schema declared.
No examples provided.
search_quotes Search quotes ~128
Search GPS's published quote collection — statements from incarcerated people, families, officials and staff that GPS has already published. `attribution_type` is 'named' or 'anonymous'. `category` is one of the published categories (call with no arguments and read the results, or see gps.press). Paginated: page starts at 1, per_page caps at 100.
| Name | Type | Req | Description |
|---|---|---|---|
| attribution_type | string | – | – |
| category | string | – | – |
| page | integer | – | – |
| per_page | integer | – | – |
| search | string | – | – |
No output schema declared.
No examples provided.
search_site Search site ~99
Search gps.press — articles, data pages, research library topics and facility pages — and get back ranked titles, URLs and summaries. This reads the public /find/ results page. GPS publishes no JSON search API, so results are parsed out of the rendered page; treat the ranking as the site's own and follow each result's URL before citing it.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| query | string | yes | – |
No output schema declared.
No examples provided.
What is the Georgia Prisoners' Speak Public Data MCP server?
Georgia Prisoners' Speak Public Data is an MCP server listed in the public MCP registry as press.gps/gps-public-data. Read-only public data on Georgia's prisons: population, facilities, deaths, contraband, statutes. This page covers its hosted endpoint (https://data.gps.press/mcp).
Is the Georgia Prisoners' Speak Public Data MCP server safe to use?
Georgia Prisoners' Speak Public Data scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Georgia Prisoners' Speak Public Data MCP server expose?
Georgia Prisoners' Speak Public Data exposes 22 tools: get_population_snapshot, get_system_statistics, list_facilities, get_facility_staff_roster, get_facility, and 17 more. Their descriptions and schemas cost roughly 2,932 tokens of context every time the server is loaded.
Does the Georgia Prisoners' Speak Public Data MCP server require authentication?
No. We connected to Georgia Prisoners' Speak Public Data without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Georgia Prisoners' Speak Public Data MCP server still maintained?
Georgia Prisoners' Speak Public Data is still listed as active in the MCP registry. We last reached this channel on 3 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.