Skip to main content
Glama

alalanet — check before you pay

Is it safe to open this repository in an agent?

check_repo_config
Read-only

Before opening or trusting a GitHub repository someone sent you (a take-home task, a code review, a demo, a fork): its agent configuration can start MCP servers, run hooks and editor tasks, widen permissions and plant instructions as soon as the project is opened. Pass repo (owner/repo or a GitHub URL) and optional ref; for a local or private checkout pass files instead (path -> content of those files; the public record then holds only the decision, the files' sha256 and bare reason codes, the packages they name are checked without being signed, remote servers are looked up but not probed, and only CODEX_HOME, model-API, proxy and preload variables are read from .env). alalanet reads the files agents and editors load (.mcp.json at any depth, .github/mcp.json, .claude/settings.json, .cursor/mcp.json and hooks.json, .vscode/mcp.json, settings.json and tasks.json, .devcontainer, .gemini/settings.json and .env, .zed/settings.json, .codex/config.toml and hooks.json, .github/hooks and copilot settings, .env, registry settings (.npmrc, .yarnrc(.yml), bunfig.toml, uv.toml, pyproject.toml), CLAUDE.md, CLAUDE.local.md, AGENTS.md, GEMINI.md, .cursorrules, rules, agents, commands and skills folders including .github/agents and .agents/skills, with their frontmatter; symlinks read at their target) and runs nothing. It finds tasks and hooks that download and run code when the folder opens, hooks, skills and MCP servers that do the same (inline servers in agent files included), broad permissions including tools a skill grants itself, acceptEdits mode, plugin marketplaces and plugins the repository turns on, credential helpers and shell prefixes, repository MCP servers enabled without asking, the model API or a proxy pointed at another host (how API keys are taken), the package registry moved elsewhere, CODEX_HOME moved into the repository, invisible Unicode tag characters and bidirectional controls in instruction files, injection and concealment phrases, secrets committed in configs (never echoed); each MCP server goes through install_check. Returns decision allow / hold / block with reasons per file, findings, MCP servers with their verdicts and advice, signed into the public log (kind 4315). Whatever could not be read or checked holds as check_incomplete:, never an allow. Free, no account: one check plus one per MCP server checked; cached 10 minutes.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "check_repo_config"
  }
}

Input Schema

NameRequiredDescriptionDefault
refNobranch, tag or commit to read; default: the default branch
repoNothe public GitHub repository: owner/repo or https://github.com/owner/repo (or pass files instead)
filesNoinstead of repo, for a local or private checkout: the agent configuration files as path from the repository root -> content (only the paths this tool reads, at most 40 files and 2 MB in all). alalanet keeps no content; the public record holds only the decision, the files' sha256 and bare reason codes (no paths, no names); the packages they name are checked without being signed or logged; remote servers are looked up, never probed; from .env only CODEX_HOME, model-API, proxy and preload variables are read

Output Schema

NameRequiredDescriptionDefault
refYes
repoYes
adviceYes
meaningYes
reasonsYes
decisionYes
findingsYes
tree_shaNo
checked_atYes
commit_shaNo
files_readYes
files_saltNo
attestationNo
mcp_serversYes
files_sha256No

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / commit_sha
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / files_salt
      Added value: +{
      +  "type": "string"
      +}
  2. Changed8 schema fields changed
    • removedOutput schema / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / attestation / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / attestation / properties
      Removed value: -{
      -  "event": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "content": {
      -        "type": "string"
      -      },
      -      "created_at": {
      -        "type": "integer"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "kind": {
      -        "type": "integer"
      -      },
      -      "pubkey": {
      -        "type": "string"
      -      },
      -      "sig": {
      -        "type": "string"
      -      },
      -      "tags": {
      -        "items": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": [
      -            "null",
      -            "array"
      -          ]
      -        },
      -        "type": [
      -          "null",
      -          "array"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "pubkey",
      -      "created_at",
      -      "kind",
      -      "tags",
      -      "content",
      -      "sig"
      -    ],
      -    "type": "object"
      -  },
      -  "event_json": {
      -    "type": "string"
      -  },
      -  "how_to_verify": {
      -    "type": "string"
      -  },
      -  "log_index": {
      -    "type": "integer"
      -  },
      -  "log_key": {
      -    "type": "string"
      -  },
      -  "log_origin": {
      -    "type": "string"
      -  },
      -  "pending": {
      -    "type": "boolean"
      -  },
      -  "proof": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "checkpoint": {
      -        "type": "string"
      -      },
      -      "hashes": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": [
      -          "null",
      -          "array"
      -        ]
      -      },
      -      "index": {
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "leaf_hash": {
      -        "type": "string"
      -      },
      -      "root_hash": {
      -        "type": "string"
      -      },
      -      "tree_size": {
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "index",
      -      "tree_size",
      -      "root_hash",
      -      "leaf_hash",
      -      "hashes",
      -      "checkpoint"
      -    ],
      -    "type": [
      -      "null",
      -      "object"
      -    ]
      -  },
      -  "server_pubkey": {
      -    "type": "string"
      -  },
      -  "signer": {
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / attestation / required
      Removed value: -[
      -  "event",
      -  "event_json",
      -  "log_index",
      -  "log_origin",
      -  "log_key",
      -  "server_pubkey",
      -  "signer",
      -  "how_to_verify"
      -]
    • removedOutput schema / properties / files_read / items
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / findings / items
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "decision": {
      -      "type": "string"
      -    },
      -    "detail": {
      -      "type": "string"
      -    },
      -    "file": {
      -      "type": "string"
      -    },
      -    "reason": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "decision",
      -    "reason"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / mcp_servers / items
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "decision": {
      -      "type": "string"
      -    },
      -    "file": {
      -      "type": "string"
      -    },
      -    "name": {
      -      "type": "string"
      -    },
      -    "reasons": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": [
      -        "null",
      -        "array"
      -      ]
      -    },
      -    "target": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "file",
      -    "name",
      -    "decision"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / reasons / items
      Removed value: -{
      -  "type": "string"
      -}
  3. Changed3 schema fields changed
    • changedInput schema / properties / files / description
      Previous value: -"instead of repo, for a local or private checkout: the agent configuration files as path from the repository root -> content (only the paths this tool reads, at most 40 files and 2 MB in all). alalanet keeps no content, only the signed verdict over their sha256; leave out files whose secrets must not leave the machine"New value: +"instead of repo, for a local or private checkout: the agent configuration files as path from the repository root -> content (only the paths this tool reads, at most 40 files and 2 MB in all). alalanet keeps no content; the public record holds only the decision, the files' sha256 and bare reason codes (no paths, no names); the packages they name are checked without being signed or logged; remote servers are looked up, never probed; from .env only CODEX_HOME, model-API, proxy and preload variables are read"
    • changedInput schema / properties / repo / description
      Previous value: -"the public GitHub repository: owner/repo or https://github.com/owner/repo"New value: +"the public GitHub repository: owner/repo or https://github.com/owner/repo (or pass files instead)"
    • removedInput schema / required
      Removed value: -[
      -  "repo"
      -]
  4. Changed2 schema fields changed
    • addedInput schema / properties / files
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "instead of repo, for a local or private checkout: the agent configuration files as path from the repository root -> content (only the paths this tool reads, at most 40 files and 2 MB in all). alalanet keeps no content, only the signed verdict over their sha256; leave out files whose secrets must not leave the machine",
      +  "type": "object"
      +}
    • addedOutput schema / properties / files_sha256
      Added value: +{
      +  "type": "string"
      +}
  5. Added

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, it discloses the safety profile precisely: 'runs nothing', 'remote servers are looked up but not probed', packages 'checked without being signed', only specific variables read from .env, and that content is never retained (public log holds decision, sha256, bare reason codes). It also states cost/quota ('Free, no account: one check plus one per MCP server checked'), caching ('cached 10 minutes'), and the fail-safe rule that unreadable checks 'hold as check_incomplete:<what>, never an allow'.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is effectively one wall of text in which the long file enumeration ('CLAUDE.md, CLAUDE.local.md, AGENTS.md, GEMINI.md, .cursorrules...') and the findings list compete for attention. The privacy details about files mode are stated twice, once in the description body and once in the schema, which wastes space. It is information-dense but poorly sectioned for scanning.

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?

For a three-parameter, open-world, nested-object tool, the description covers invocation modes, what is inspected, what is deliberately not done (no execution, no probing), quota and caching, privacy of the public record, and the failure semantics (check_incomplete rather than allow). The return values are also summarized despite an output schema existing, so an agent has everything needed to call it and interpret the verdict.

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?

With schema coverage at 100% the baseline is 3, but the description adds real meaning: the repo-or-files exclusivity that the schema leaves unenforced (nothing is required), the accepted repo formats (owner/repo or GitHub URL), and the ref default. It also explains the privacy implications of files mode (only paths this tool reads, at most 40 files and 2 MB), which qualifies how the parameter should be used.

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?

The description states a specific verb and resource (check a repository's agent configuration) with the exact goal: 'Is it safe to open this repository in an agent?' and enumerates what it inspects (.mcp.json, .claude/settings.json, hooks, skills, .env, registry settings). It also distinguishes itself from a sibling by delegating MCP server verdicts to 'install_check', so an agent knows which tool produces which verdict.

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?

Usage context is explicit and front-loaded: use it 'before opening or trusting a GitHub repository someone sent you (a take-home task, a code review, a demo, a fork)'. It also gives clear parameter-selection guidance, saying to pass repo for public GitHub and files 'instead of repo, for a local or private checkout'. It stops short of stating when not to use it or which other sibling would cover a different scenario.

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