mcpField
I
introspect

introspect

github.com/hainrixz数据与数据库2170 次安装4 天前更新
代码仓库

关于 introspect

introspect 是只读数据库审计技能,用于收集仅凭文件无法确认的运行时信息。它检查数据库目录,优先使用 DB MCP 服务的只读工具,并标明需要 API 访问的检查项。

主要功能

  1. 01读取数据库目录
  2. 02检查索引、约束和 RLS
  3. 03收集引擎版本与表大小
  4. 04执行只读查询规则
  5. 05报告需要 API 访问的检查

适用场景

  1. 01核实实时索引和约束状态
  2. 02检查行级安全配置
  3. 03收集数据库审计所需的运行时信息

MCP 相关

它优先通过 DB MCP 服务连接,并仅使用查询、读取、列表、描述和架构等只读工具。它避免调用变更数据的工具,并对通用查询工具应用只读校验。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hainrixz/claude-db --skill introspect

安装后在 Claude Code 中输入/introspect确认已加载。

详细介绍

introspect(第 1 层——实时只读)

第 0 层读取文件。许多检查需要文件无法提供的运行时实况:实际索引使用情况、缺少索引的外键连接、表和行的大小、RLS 状态、扩展、引擎版本、自动清理和回绕状态。introspect 是获取这些信息的唯一途径,并且按约定只读。参见 references/data-tiers.md。

连接路径(优先使用 MCP)

  1. 数据库 MCP 服务(首选)——权限边界更清晰。仅使用名称匹配 *query* / *read* / *list* / *describe* / *schema* 的读取类工具。具有通用写入能力的 query 工具会经过下方相同的只读验证器;mcp__.* 上的 PreToolUse 钩子也会提供保护。先列出可用工具;绝不调用会修改数据的工具。
  2. 否则,使用从环境变量中的 $DATABASE_URL 读取的最小权限只读连接字符串——绝不回显,也绝不写入发现项。redactSecrets() 会清除任何进入发现项、报告或日志的凭据。
  3. 两者均不可用 → 对每项依赖此连接的检查输出 status: needs_api,并说明原因和所需的最低授权。绝不默默通过,也绝不伪造行数、大小或查询计划。

只读约定(在执行任何查询前强制执行)

  • SET default_transaction_read_only = on;
  • 设置有界的 statement_timeout(例如 SET statement_timeout = '15s';)。
  • 仅允许 SELECT / EXPLAIN(除计划外,不产生 ANALYZE 写入副作用)/ 目录读取。拒绝其他所有操作。

读取的目录(不读取行数据)

  • Postgres: version()、information_schema、pg_catalog、pg_class、pg_index、pg_indexes、pg_constraint、pg_policies、pg_extension。第 2 层会增加 pg_stat_user_indexes / pg_stat_user_tables、pg_stat_statements、age(datfrozenxid)。
  • MySQL/MariaDB: information_schema(TABLES、STATISTICS、KEY_COLUMN_USAGE)、SHOW ENGINE INNODB STATUS(读取)。
  • Mongo: db.stats()、$indexStats、$collStats(第 2 层)。
  • Cassandra: system_schema、nodetool tablehistograms(第 2 层)。

对发现项的影响

有实时证据支持的检查会升级为 confidence: established,因此可能限制评分(例如,确认 int4/serial 主键接近耗尽、TXID 即将回绕、被依赖的表已关闭 RLS)。没有实时访问权限时,同样的检查会保持为 directional 或变为 needs_api——绝不会仅凭静态信号限制评分。每项发现仍须符合 schema/finding.schema.json;verification.reproduce 引用 $DATABASE_URL,绝不包含明文凭据。

输出

返回调用方审计器所需的目录事实(索引清单、RLS 状态、版本、大小),并清晰说明哪些检查仍为 needs_api 及其原因。使用用户的语言作答(EN/ES)。

评论

支持 Markdown