Skip to main content
Glama

Jid: the trust API for AI agents

Should I engage? (screen a lead, sender, vendor or website)

screen
Read-only

Screens a lead, sender, vendor or website and returns an engage-or-not answer. Input: any of domain, url, email, phone or company_name, the context (lead, inbound_email, partnership, vendor, purchase, marketplace_seller, agent_action), an optional amount (USD) and a policy (strict, balanced, permissive; default balanced). Returns engage (true or false), risk (low, medium, high, unknown), confidence 0 to 1, subject_type, reasons (each with source and evidence), mitigations, checks, a read (headline, recommendation engage | verify_first | do_not_engage, failed checks, lookup links) and a signed receipt_id. Deterministic, no AI in the decision, usually under a second. A possible sanctions name match returns engage=false with 'manual review', not a finding. For individuals only technical checks of the address, phone or domain run. engage is advisory. Rules: https://jid.com/screen-rules. Counts as 1 check with a key; free tier without one.

Input Schema

NameRequiredDescriptionDefault
urlNoWebsite or page URL (purchase checks: only the host is used)
siteNoThe submitting website's domain (binds the signal token)
emailNoSender e-mail address (hashed on the receipt, never stored)
phoneNoPhone number, ideally in +E.164
amountNoAmount at stake, USD
domainNoCompany domain
ip_asnNoASN of the request's network, to recognise hosting and VPN networks
policyNostrict, balanced (default) or permissive
signalNoJid Signals token (the form's jid_signal field): Jid's own reading of the visitor's location; replaces the ip_* fields when it verifies
contextNoWhat engaging means here; default lead (purchase when only a url or domain is given)
countryNoDefault country for a phone number without +, ISO alpha-2
ip_regionNoRegion of the request (ISO 3166-2, e.g. US-CA or CA)
ip_countryNoCountry the request came from (ISO alpha-2), for the location consistency check
company_nameNoCompany name as stated
stated_countryNoCountry the counterparty stated
browser_timezoneNoIANA time zone reported by the browser

Output Schema

NameRequiredDescriptionDefault
noteYesTerms of use for the facts
readYesWhat a person sees: headline, recommendation, failed checks and lookup links
riskYeslow | medium | high | unknown
checksYes
engageYes
entityNo
policyNo
contextNo
reasonsYes
summaryNo
rules_urlNo
checked_atNo
confidenceYes
receipt_idYes
checks_usedYes
mitigationsNo
receipt_urlNo
subject_typeYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "checked_at": {
      +      "type": "string"
      +    },
      +    "checks": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "evidence": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "severity": {
      +            "type": "string"
      +          },
      +          "status": {
      +            "description": "pass | fail | unknown | not_applicable",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "status"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "checks_used": {
      +      "type": "number"
      +    },
      +    "confidence": {
      +      "type": "number"
      +    },
      +    "context": {
      +      "type": "string"
      +    },
      +    "engage": {
      +      "type": "boolean"
      +    },
      +    "entity": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "name",
      +            "url"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "mitigations": {
      +      "items": {},
      +      "type": "array"
      +    },
      +    "note": {
      +      "description": "Terms of use for the facts",
      +      "type": "string"
      +    },
      +    "policy": {
      +      "type": "string"
      +    },
      +    "read": {
      +      "additionalProperties": {},
      +      "description": "What a person sees: headline, recommendation, failed checks and lookup links",
      +      "properties": {
      +        "failed": {
      +          "description": "Failed checks, worst first, at most 3",
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "evidence": {
      +                "type": "string"
      +              },
      +              "label": {
      +                "type": "string"
      +              },
      +              "lookup": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "label": {
      +                    "type": "string"
      +                  },
      +                  "url": {
      +                    "type": "string"
      +                  }
      +                },
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "label",
      +              "evidence"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "headline": {
      +          "description": "One line, e.g. \"Passed all 7 checks Jid could run. Recommendation: engage.\"",
      +          "type": "string"
      +        },
      +        "not_checked": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "passed": {
      +          "type": "number"
      +        },
      +        "reason": {
      +          "type": "string"
      +        },
      +        "recommendation": {
      +          "description": "engage | verify_first | do_not_engage",
      +          "type": "string"
      +        },
      +        "total": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "headline",
      +        "recommendation",
      +        "passed",
      +        "total",
      +        "failed"
      +      ],
      +      "type": "object"
      +    },
      +    "reasons": {
      +      "items": {},
      +      "type": "array"
      +    },
      +    "receipt_id": {
      +      "type": "string"
      +    },
      +    "receipt_url": {
      +      "type": "string"
      +    },
      +    "risk": {
      +      "description": "low | medium | high | unknown",
      +      "type": "string"
      +    },
      +    "rules_url": {
      +      "type": "string"
      +    },
      +    "subject_type": {
      +      "type": "string"
      +    },
      +    "summary": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "engage",
      +    "risk",
      +    "confidence",
      +    "subject_type",
      +    "reasons",
      +    "read",
      +    "checks",
      +    "receipt_id",
      +    "checks_used",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / signal
      Added value: +{
      +  "description": "Jid Signals token (the form's jid_signal field): Jid's own reading of the visitor's location; replaces the ip_* fields when it verifies",
      +  "maxLength": 800,
      +  "type": "string"
      +}
    • addedInput schema / properties / site
      Added value: +{
      +  "description": "The submitting website's domain (binds the signal token)",
      +  "maxLength": 253,
      +  "type": "string"
      +}
  3. Changed5 schema fields changed
    • addedInput schema / properties / browser_timezone
      Added value: +{
      +  "description": "IANA time zone reported by the browser",
      +  "maxLength": 60,
      +  "type": "string"
      +}
    • addedInput schema / properties / ip_asn
      Added value: +{
      +  "description": "ASN of the request's network, to recognise hosting and VPN networks",
      +  "exclusiveMinimum": 0,
      +  "maximum": 9007199254740991,
      +  "type": "integer"
      +}
    • addedInput schema / properties / ip_country
      Added value: +{
      +  "description": "Country the request came from (ISO alpha-2), for the location consistency check",
      +  "maxLength": 2,
      +  "minLength": 2,
      +  "type": "string"
      +}
    • addedInput schema / properties / ip_region
      Added value: +{
      +  "description": "Region of the request (ISO 3166-2, e.g. US-CA or CA)",
      +  "maxLength": 10,
      +  "type": "string"
      +}
    • addedInput schema / properties / stated_country
      Added value: +{
      +  "description": "Country the counterparty stated",
      +  "maxLength": 2,
      +  "minLength": 2,
      +  "type": "string"
      +}
  4. First observed

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/idempotent=false/destructive=false; the description goes well beyond them, disclosing determinism ('no AI in the decision'), sub-second latency, an explicit edge case (sanctions name match returns engage=false with 'manual review', not a finding), a scope limitation (for individuals only technical checks run), advisory status of the verdict, and the cost model. That is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is long, but front-loaded with purpose and inputs before returns and rules, and nearly every clause carries information (latency, determinism, billing, advisory status). The returns enumeration is somewhat redundant given an output schema exists and makes the prose denser than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, zero-required tool with an output schema, the description supplies what the schema cannot: which identifiers are acceptable, the decision semantics, edge cases, and cost. It does not explain how the ip_*/signal fields interact with the main identifiers, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each of the 16 fields is documented in-schema, so the baseline is 3. The description does add value by stating that any of domain/url/email/phone/company_name is acceptable input (important because the schema marks zero required fields) and by explaining the context enum's meaning, but it adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Screens a lead, sender, vendor or website') and the concrete decision it returns ('engage-or-not answer'), which is far more than a tautology. It never names or contrasts the closest siblings (check_email, qualify_counterparty, verify_business), so an agent must infer which screener to pick from scope alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the enumerated context values (lead, inbound_email, partnership, vendor, purchase, marketplace_seller, agent_action) and their default ('default lead (purchase when only a url or domain is given)'), but there is no explicit when-to-use vs alternatives guidance against sibling tools. The billing note ('Counts as 1 check with a key; free tier without one') is operational, not a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources