Skip to main content
Glama

Jid: the trust API for AI agents

Is this e-mail really from who it says? (SPF, DKIM, DMARC, lookalike sender)

check_email
Read-only

Checks whether an e-mail is from who it claims. Input: the raw headers of a message (as shown by Show original or View source). Returns checks and a read (headline, recommendation engage | verify_first | do_not_engage, failed checks, lookup links): DMARC/SPF/DKIM as the receiving server recorded them, DKIM alignment with From, Reply-To going to another domain, and a From domain or display name that imitates a known business. The headers are processed in memory and never stored. Deterministic, no AI. Counts as 1 check with a key; free tier without one.

Input Schema

NameRequiredDescriptionDefault
headersYesThe raw message headers, as one string (the body is not needed)

Output Schema

NameRequiredDescriptionDefault
noteYesTerms of use for the facts
readYesWhat a person sees: headline, recommendation, failed checks and lookup links
checksYes
checked_atNo
checks_usedYes
from_domainYes
rules_versionNo
authenticationNo
reply_to_domainNo

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": {
      +    "authentication": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "dmarc": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "spf": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "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"
      +    },
      +    "from_domain": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "note": {
      +      "description": "Terms of use for the facts",
      +      "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"
      +    },
      +    "reply_to_domain": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "rules_version": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "read",
      +    "checks",
      +    "from_domain",
      +    "checks_used",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  2. Added
  3. Removed
  4. Added

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing privacy handling ('processed in memory and never stored'), determinism ('Deterministic, no AI'), and the cost model ('Counts as 1 check with a key; free tier without one'). These are exactly the operational traits an agent needs and that readOnlyHint/openWorldHint cannot convey.

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

Conciseness5/5

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

Front-loads the core question in the first sentence, then groups input, output, method, and cost into tight clauses. Length is justified by the number of distinct facts conveyed; no filler sentences.

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

Completeness5/5

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

Covers purpose, input source, return shape, evaluation method, privacy, and billing for a single-parameter tool. Return values are described even though an output schema exists, which is redundant but harmless; nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: it identifies the argument as raw message headers obtainable via 'Show original or View source' and clarifies the body is not needed. That reduces the chance of a caller passing a parsed/partial header set.

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

Purpose5/5

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

States a specific verb and resource (checks whether an e-mail is from who it claims) and enumerates the exact signals evaluated: DMARC/SPF/DKIM as recorded by the receiving server, DKIM alignment with From, Reply-To domain mismatch, and lookalike sender. An agent can distinguish this from the business-verification siblings at a glance.

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

Usage Guidelines4/5

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

Gives concrete context for when to invoke it: 'Input: the raw headers of a message (as shown by Show original or View source).' It does not state when NOT to use it or name an alternative sibling, but the sibling set (business/file/receipt lookups) is far enough away that routing is unambiguous.

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