Server definition
- Hash
- sha256:713c5ebdc4bd9247822892e29ad2ae0d62b638d1110112c3ad87061671da9c3a
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": "This server provides IP address intelligence tools powered by IPinfo. Use ipinfo_lookup to get geolocation and network details for IP addresses. Use ipinfo_check_privacy to check if IPs use VPNs, proxies, or Tor. Use ipinfo_check_residential_proxy to detect residential proxy usage. Use ipinfo_geolocate to get geographic location data. Use ipinfo_asn to get network ownership information. Use ipinfo_quota to check your API usage and remaining quota. This server maintains an in-memory cache of IP lookup results for the lifetime of the session, so you do not need to keep your own cache or deduplicate IPs before calling tools: repeat lookups of the same IP are served from cache and do not consume API quota. The _meta field on each response reports how many results came from cache vs. the API.",
"tools": [
{
"description": "Get autonomous system (network ownership) information for IP addresses.\n\nBy default queries the IPinfo Lite endpoint, which returns ASN, name, and domain.\nSet detailed=True to query the full lookup endpoint, which also includes the network type\n(e.g. isp, hosting, business, education).\n\nResults are paginated.\n\nIf the API reports an error for specific IPs, those IPs are listed in errors\nwith the reason and left out of results.\n\nResults are cached in memory for the session, so repeat lookups of the same IP\nare served from cache without consuming API quota. You do not need to maintain\nyour own cache or deduplicate IPs before calling this tool. The _meta field\nreports api_calls_made and from_cache counts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"detailed": {
"default": false,
"description": "Which IPinfo endpoint to query. Leave false to use the Lite endpoint, which returns the ASN, name, and domain. Set to true to use the full lookup endpoint, which also returns the network type (isp, hosting, business, education) and when the AS record last changed; it requires a token whose plan includes that data, otherwise the call fails with ACCESS_DENIED.",
"type": "boolean"
},
"ips": {
"description": "Public IP addresses to query, IPv4 or IPv6, e.g. [\"8.8.8.8\", \"2001:4860:4860::8888\"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results.",
"items": {
"type": "string"
},
"type": "array"
},
"page": {
"default": 1,
"description": "Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results.",
"type": "integer"
},
"page_size": {
"default": 25,
"description": "How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call.",
"type": "integer"
}
},
"required": [
"ips"
],
"type": "object"
},
"name": "ipinfo_asn",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"properties": {
"_meta": {
"properties": {
"api_calls_made": {
"type": "integer"
},
"from_cache": {
"type": "integer"
}
},
"required": [
"api_calls_made",
"from_cache"
],
"type": "object"
},
"_pagination": {
"properties": {
"has_next": {
"type": "boolean"
},
"has_previous": {
"type": "boolean"
},
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
},
"required": [
"total_results",
"page",
"page_size",
"total_pages",
"has_next",
"has_previous"
],
"type": "object"
},
"errors": {
"additionalProperties": {
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
"results": {
"additionalProperties": {
"properties": {
"asn": {
"type": "string"
},
"domain": {
"type": "string"
},
"ip": {
"type": "string"
},
"last_changed": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"ip",
"asn",
"name",
"domain"
],
"type": "object"
},
"type": "object"
},
"validation_errors": {
"additionalProperties": {
"type": "string"
},
"type": "object"
}
},
"required": [
"_pagination",
"_meta",
"results"
],
"type": "object"
},
{
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Check whether IP addresses are using privacy or anonymity services.\n\nReturns privacy flags for each IP: whether it is anonymous, using a VPN, proxy,\nrelay, or Tor, and whether it is an anycast, hosting, mobile, or satellite address.\n\nRequires a paid API token. Results are paginated.\n\nIf the API reports an error for specific IPs, those IPs are listed in errors\nwith the reason and left out of results. Do not treat a missing result as\n\"no privacy services detected\": check errors.\n\nResults are cached in memory for the session, so repeat checks of the same IP\nare served from cache without consuming API quota. You do not need to maintain\nyour own cache or deduplicate IPs before calling this tool. The _meta field\nreports api_calls_made and from_cache counts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"ips": {
"description": "Public IP addresses to query, IPv4 or IPv6, e.g. [\"8.8.8.8\", \"2001:4860:4860::8888\"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results.",
"items": {
"type": "string"
},
"type": "array"
},
"page": {
"default": 1,
"description": "Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results.",
"type": "integer"
},
"page_size": {
"default": 25,
"description": "How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call.",
"type": "integer"
}
},
"required": [
"ips"
],
"type": "object"
},
"name": "ipinfo_check_privacy",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"properties": {
"_meta": {
"properties": {
"api_calls_made": {
"type": "integer"
},
"from_cache": {
"type": "integer"
}
},
"required": [
"api_calls_made",
"from_cache"
],
"type": "object"
},
"_pagination": {
"properties": {
"has_next": {
"type": "boolean"
},
"has_previous": {
"type": "boolean"
},
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
},
"required": [
"total_results",
"page",
"page_size",
"total_pages",
"has_next",
"has_previous"
],
"type": "object"
},
"errors": {
"additionalProperties": {
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
"results": {
"additionalProperties": {
"properties": {
"anonymous": {
"properties": {
"is_proxy": {
"type": "boolean"
},
"is_relay": {
"type": "boolean"
},
"is_tor": {
"type": "boolean"
},
"is_vpn": {
"type": "boolean"
},
"name": {
"type": "string"
}
},
"required": [
"is_proxy",
"is_relay",
"is_tor",
"is_vpn"
],
"type": "object"
},
"ip": {
"type": "string"
},
"is_anonymous": {
"type": "boolean"
},
"is_anycast": {
"type": "boolean"
},
"is_hosting": {
"type": "boolean"
},
"is_mobile": {
"type": "boolean"
},
"is_satellite": {
"type": "boolean"
}
},
"required": [
"ip",
"is_anonymous",
"anonymous",
"is_anycast",
"is_hosting",
"is_mobile",
"is_satellite"
],
"type": "object"
},
"type": "object"
},
"validation_errors": {
"additionalProperties": {
"type": "string"
},
"type": "object"
}
},
"required": [
"_pagination",
"_meta",
"results"
],
"type": "object"
},
{
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Check whether IP addresses are known residential proxies.\n\nReturns whether each IP is a residential proxy and, if so, the proxy service name,\nthe date it was last seen, and the percentage of days the IP was observed as a proxy.\n\nRequires a paid API token with residential proxy access. Results are paginated.\n\nIf the API reports an error for specific IPs, those IPs are listed in errors\nwith the reason and left out of results. Do not treat a missing result as\n\"not a residential proxy\": check errors.\n\nResults are cached in memory for the session, so repeat checks of the same IP\nare served from cache without consuming API quota. You do not need to maintain\nyour own cache or deduplicate IPs before calling this tool. The _meta field\nreports api_calls_made and from_cache counts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"ips": {
"description": "Public IP addresses to query, IPv4 or IPv6, e.g. [\"8.8.8.8\", \"2001:4860:4860::8888\"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results.",
"items": {
"type": "string"
},
"type": "array"
},
"page": {
"default": 1,
"description": "Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results.",
"type": "integer"
},
"page_size": {
"default": 25,
"description": "How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call.",
"type": "integer"
}
},
"required": [
"ips"
],
"type": "object"
},
"name": "ipinfo_check_residential_proxy",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"properties": {
"_meta": {
"properties": {
"api_calls_made": {
"type": "integer"
},
"from_cache": {
"type": "integer"
}
},
"required": [
"api_calls_made",
"from_cache"
],
"type": "object"
},
"_pagination": {
"properties": {
"has_next": {
"type": "boolean"
},
"has_previous": {
"type": "boolean"
},
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
},
"required": [
"total_results",
"page",
"page_size",
"total_pages",
"has_next",
"has_previous"
],
"type": "object"
},
"errors": {
"additionalProperties": {
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
"results": {
"additionalProperties": {
"properties": {
"ip": {
"type": "string"
},
"is_residential_proxy": {
"type": "boolean"
},
"last_seen": {
"type": "string"
},
"percent_days_seen": {
"type": "integer"
},
"service": {
"type": "string"
}
},
"required": [
"ip",
"is_residential_proxy"
],
"type": "object"
},
"type": "object"
},
"validation_errors": {
"additionalProperties": {
"type": "string"
},
"type": "object"
}
},
"required": [
"_pagination",
"_meta",
"results"
],
"type": "object"
},
{
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Get geographic location data for one or more IP addresses.\n\nBy default queries the IPinfo Lite endpoint, which returns country and continent.\nSet detailed=True to query the full lookup endpoint, which adds city, region,\ncoordinates, timezone, and postal code.\n\nResults are paginated.\n\nIf the API reports an error for specific IPs, those IPs are listed in errors\nwith the reason and left out of results.\n\nResults are cached in memory for the session, so repeat lookups of the same IP\nare served from cache without consuming API quota. You do not need to maintain\nyour own cache or deduplicate IPs before calling this tool. The _meta field\nreports api_calls_made and from_cache counts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"detailed": {
"default": false,
"description": "Which IPinfo endpoint to query. Leave false to use the Lite endpoint, which returns country and continent only. Set to true to use the full lookup endpoint, which also returns city, region, latitude and longitude, timezone, and postal code; it requires a token whose plan includes that data, otherwise the call fails with ACCESS_DENIED.",
"type": "boolean"
},
"ips": {
"description": "Public IP addresses to query, IPv4 or IPv6, e.g. [\"8.8.8.8\", \"2001:4860:4860::8888\"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results.",
"items": {
"type": "string"
},
"type": "array"
},
"page": {
"default": 1,
"description": "Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results.",
"type": "integer"
},
"page_size": {
"default": 25,
"description": "How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call.",
"type": "integer"
}
},
"required": [
"ips"
],
"type": "object"
},
"name": "ipinfo_geolocate",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"properties": {
"_meta": {
"properties": {
"api_calls_made": {
"type": "integer"
},
"from_cache": {
"type": "integer"
}
},
"required": [
"api_calls_made",
"from_cache"
],
"type": "object"
},
"_pagination": {
"properties": {
"has_next": {
"type": "boolean"
},
"has_previous": {
"type": "boolean"
},
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
},
"required": [
"total_results",
"page",
"page_size",
"total_pages",
"has_next",
"has_previous"
],
"type": "object"
},
"errors": {
"additionalProperties": {
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
"results": {
"additionalProperties": {
"properties": {
"city": {
"type": "string"
},
"continent": {
"type": "string"
},
"continent_code": {
"type": "string"
},
"country": {
"type": "string"
},
"country_code": {
"type": "string"
},
"ip": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"postal_code": {
"type": "string"
},
"region": {
"type": "string"
},
"region_code": {
"type": "string"
},
"timezone": {
"type": "string"
}
},
"required": [
"ip",
"country",
"country_code",
"continent",
"continent_code"
],
"type": "object"
},
"type": "object"
},
"validation_errors": {
"additionalProperties": {
"type": "string"
},
"type": "object"
}
},
"required": [
"_pagination",
"_meta",
"results"
],
"type": "object"
},
{
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Look up geolocation, network, and metadata for one or more IP addresses.\n\nBy default queries the IPinfo Lite endpoint, which returns country, continent, and ASN info.\nSet detailed=True to query the full lookup endpoint, which adds city-level geolocation,\nprivacy flags (VPN, proxy, Tor, hosting, anycast), and richer AS data.\n\nResults are paginated. Use page and page_size to control which slice is returned.\n\nIf the API reports an error for specific IPs, those IPs are listed in errors\nwith the reason and left out of results.\n\nResults are cached in memory for the session, so repeat lookups of the same IP\nare served from cache without consuming API quota. You do not need to maintain\nyour own cache or deduplicate IPs before calling this tool. The _meta field\nreports api_calls_made and from_cache counts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"detailed": {
"default": false,
"description": "Which IPinfo endpoint to query. Leave false to use the Lite endpoint, which returns country, continent, and basic ASN. Set to true to use the full lookup endpoint, which also returns city-level geolocation, privacy flags (VPN, proxy, Tor, hosting, anycast), and richer AS data; it requires a token whose plan includes that data, otherwise the call fails with ACCESS_DENIED.",
"type": "boolean"
},
"ips": {
"description": "Public IP addresses to query, IPv4 or IPv6, e.g. [\"8.8.8.8\", \"2001:4860:4860::8888\"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results.",
"items": {
"type": "string"
},
"type": "array"
},
"page": {
"default": 1,
"description": "Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results.",
"type": "integer"
},
"page_size": {
"default": 25,
"description": "How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call.",
"type": "integer"
}
},
"required": [
"ips"
],
"type": "object"
},
"name": "ipinfo_lookup",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"properties": {
"_meta": {
"properties": {
"api_calls_made": {
"type": "integer"
},
"from_cache": {
"type": "integer"
}
},
"required": [
"api_calls_made",
"from_cache"
],
"type": "object"
},
"_pagination": {
"properties": {
"has_next": {
"type": "boolean"
},
"has_previous": {
"type": "boolean"
},
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
},
"required": [
"total_results",
"page",
"page_size",
"total_pages",
"has_next",
"has_previous"
],
"type": "object"
},
"errors": {
"additionalProperties": {
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
},
"type": "object"
},
"results": {
"additionalProperties": {
"anyOf": [
{
"properties": {
"as_domain": {
"type": "string"
},
"as_name": {
"type": "string"
},
"asn": {
"type": "string"
},
"continent": {
"type": "string"
},
"continent_code": {
"type": "string"
},
"country": {
"type": "string"
},
"country_code": {
"type": "string"
},
"hostname": {
"type": "string"
},
"ip": {
"type": "string"
}
},
"required": [
"ip",
"asn",
"as_name",
"as_domain",
"country_code",
"country",
"continent_code",
"continent"
],
"type": "object"
},
{
"properties": {
"anonymous": {
"properties": {
"is_proxy": {
"type": "boolean"
},
"is_relay": {
"type": "boolean"
},
"is_tor": {
"type": "boolean"
},
"is_vpn": {
"type": "boolean"
},
"name": {
"type": "string"
}
},
"required": [
"is_proxy",
"is_relay",
"is_tor",
"is_vpn"
],
"type": "object"
},
"as": {
"properties": {
"asn": {
"type": "string"
},
"domain": {
"type": "string"
},
"last_changed": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"asn",
"name",
"domain",
"type"
],
"type": "object"
},
"geo": {
"properties": {
"city": {
"type": "string"
},
"continent": {
"type": "string"
},
"continent_code": {
"type": "string"
},
"country": {
"type": "string"
},
"country_code": {
"type": "string"
},
"dma_code": {
"type": "string"
},
"geoname_id": {
"type": "integer"
},
"last_changed": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"postal_code": {
"type": "string"
},
"radius": {
"type": "integer"
},
"region": {
"type": "string"
},
"region_code": {
"type": "string"
},
"timezone": {
"type": "string"
}
},
"required": [
"city",
"region",
"region_code",
"country",
"country_code",
"continent",
"continent_code",
"latitude",
"longitude",
"timezone",
"postal_code"
],
"type": "object"
},
"hostname": {
"type": "string"
},
"ip": {
"type": "string"
},
"is_anonymous": {
"type": "boolean"
},
"is_anycast": {
"type": "boolean"
},
"is_hosting": {
"type": "boolean"
},
"is_mobile": {
"type": "boolean"
},
"is_satellite": {
"type": "boolean"
},
"mobile": {
"properties": {
"mcc": {
"type": "string"
},
"mnc": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"mcc",
"mnc"
],
"type": "object"
}
},
"required": [
"ip",
"geo"
],
"type": "object"
},
{
"properties": {
"ip": {
"type": "string"
},
"last_seen": {
"type": "string"
},
"percent_days_seen": {
"type": "integer"
},
"service": {
"type": "string"
}
},
"required": [
"ip",
"service",
"last_seen",
"percent_days_seen"
],
"type": "object"
},
{
"additionalProperties": true,
"type": "object"
}
]
},
"type": "object"
},
"validation_errors": {
"additionalProperties": {
"type": "string"
},
"type": "object"
}
},
"required": [
"_pagination",
"_meta",
"results"
],
"type": "object"
},
{
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Check your IPinfo API usage and remaining quota.\n\nReturns daily and monthly request counts, the plan limit,\nand how many requests remain.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "ipinfo_quota",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"properties": {
"features": {
"additionalProperties": {
"properties": {
"daily": {
"type": "integer"
},
"firmographics": {
"type": "boolean"
},
"monthly": {
"type": "integer"
},
"org_additional": {
"type": "boolean"
},
"result_limit": {
"type": "integer"
},
"vpn_provider": {
"type": "boolean"
}
},
"required": [
"daily",
"monthly"
],
"type": "object"
},
"type": "object"
},
"requests": {
"properties": {
"day": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"month": {
"type": "integer"
},
"remaining": {
"type": "integer"
}
},
"required": [
"day",
"month",
"limit",
"remaining"
],
"type": "object"
},
"token": {
"type": "string"
}
},
"required": [
"token",
"requests"
],
"type": "object"
},
{
"properties": {
"code": {
"enum": [
"ACCESS_DENIED",
"RATE_LIMITED",
"INVALID_TOKEN",
"NO_TOKEN",
"API_ERROR",
"UNKNOWN"
],
"type": "string"
},
"message": {
"type": "string"
},
"suggestion": {
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:713c5ebdc4bd9247822892e29ad2ae0d62b638d1110112c3ad87061671da9c3a | sha256sum