Token导航 LogoToken导航TokenDH.com
Kibana Assistant MCP Server logo
安全风控未说明官方级别未说明来源级核验

Kibana Assistant MCP Server

MCP Server

一个为金融行业设计的Elasticsearch MCP服务器,提供多阶段PII脱敏功能,适用于受监管环境。

工具数

4

提示词数

0

GitHub Stars

1

资源数

0
金融科技TypeScriptClaude数据安全Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

amir-gorji

提供方

amir-gorji

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

数字银行弹性MCP服务器

stdio 模型上下文协议 (MCP)Elasticsearch服务器,具有多阶段PII编辑功能,适用于金融机构或受监管环境。专为数字银行团队打造,业务经理、架构师和开发人员需要对话式访问运营数据,而无需手动编写KQL或Elasticsearch DSL。

______________________________________________________________________

目录

  1. 为什么存在
  2. 特性
  3. 建筑
  4. 快速开始

- 先决条件 - 安装和构建 - 配置 - - 连接到克劳德桌面

  1. 工具参考

- discover_cluster - 弹性搜索 - 检查集群健康状况 - 获取警报状态

  1. 提示和资源
  2. 安全与合规

- PII补救措施 - 输入消毒 - 索引访问控制 - 审计跟踪

  1. 类型系统
  2. 测试

- 单元和集成测试 - 手动重动作演示

  1. 项目结构
  2. 路线图
  3. 许可证

______________________________________________________________________

1.为什么存在

数字银行部落掌握着大量的遥测数据:支付轨道(SWIFT gpi、SEPA)、客户会话数据、APM跟踪和微服务日志。今天查询这些数据需要掌握Elasticsearch DSL或依赖可能无法回答特定问题的预构建仪表板。

此MCP服务器弥合了这一差距。它允许LLM代理发现您的集群、理解索引结构、执行只读查询和检查平台健康状况——所有这些都是通过一个安全、经过审计的管道完成的,该管道在数据离开您的基础设施之前对PII进行编辑。

Persona他们得到了什么
业务经理询问有关交易量、入职渠道或流动性指标的自然语言问题。代理为您构建DSL查询。
软件架构师探索集群拓扑结构,查看索引映射,并在不切换到外部仪表板的情况下评估系统健康状况。
开发者通过跨微服务关联日志进行调试。通过对话方式搜索错误模式、跟踪事务ID并检查警报规则。

______________________________________________________________________

2.特点

  • 群集发现 --自动发现索引、字段映射和文档计数,以便代理在查询之前知道哪些数据可用。
  • 只读搜索 --执行带有强制只读防护栏的Elasticsearch DSL查询。被屏蔽的关键字(_update, _delete, _bulk, script)在输入净化层被拒绝。
  • 群集运行状况 --返回总体集群状态(绿色/黄色/红色)、节点计数、分片计数以及集群、索引或分片粒度的未分配分片详细信息。
  • 警报状态 --检索Kibana警报规则及其上次执行状态,支持按规则类型、严重性标记和执行状态进行筛选(需要可选 KIBANA_URL).
  • 时间范围过滤 --自然时间表达式(now-24h, now-7d)自动合并到任何查询形状(bool、simple或空)中。
  • PII补救措施 --信用卡(Luhn验证)、IBAN、SSN、电子邮件和电话号码在结果到达LLM之前被屏蔽。PCI DSS和GDPR合规性的深度防御。
  • 审计日志 --每次工具调用都会记录到stderr中,包括工具名称、参数、执行时间、编校计数和错误详细信息。
  • 索引访问控制 --限制代理可以通过哪些索引进行触摸 ALLOWED_INDEX_PATTERNS.
  • 使用回退重试 --使用指数回退重试瞬态故障(429503,网络错误)。

______________________________________________________________________

3.建筑

┌─────────────┐     stdio / SSE      ┌──────────────────────┐
│  LLM Agent  │ ◄──────────────────► │   MCP Server         │
│  (Claude,   │                      │                      │
│   GPT, etc) │                      │  ┌────────────────┐  │
└─────────────┘                      │  │ Input Sanitizer │  │
                                     │  └───────┬────────┘  │
                                     │          ▼           │
                                     │  ┌────────────────┐  │
                                     │  │  Tool Execute   │  │
                                     │  └───────┬────────┘  │
                                     │          ▼           │
                                     │  ┌────────────────┐  │
                                     │  │ PII Redaction   │  │
                                     │  └───────┬────────┘  │
                                     │          ▼           │
                                     │  ┌────────────────┐  │
                                     │  │ Audit Logger    │  │
                                     │  └────────────────┘  │
                                     └──────────┬───────────┘
                                                │
                                                ▼
                                     ┌──────────────────────┐
                                     │  Elasticsearch        │
                                     │  Cluster              │
                                     └──────────────────────┘

每个工具调用都通过一个安全的管道进行: 验证输入执行查询编辑个人身份信息日志审核条目返回结果。此管道一次性实施 createSecureTool 并由所有工具共享。

______________________________________________________________________

4.快速入门

先决条件

  • Node.js 18+
  • Elasticsearch部署(弹性云或自托管)
  • 对要公开的索引具有只读权限的API密钥
  • 与Elasticsearch兼容\

cd financial-elastic-mcp-server npm install npm run build:mcp


### 配置

创建一个 `.env` 文件或导出环境变量:

Required

export ELASTIC_URL="https://your-deployment.es.us-east-1.aws.found.io" export ELASTIC_API_KEY="your-base64-encoded-api-key"

Optional — set to enable Kibana-specific features (e.g., get_alert_status)

export KIBANA_URL="https://your-deployment.kb.us-east-1.aws.found.io"

Optional

export ALLOWED_INDEX_PATTERNS="logs-*,transactions-*" # Comma-separated. Empty = all indices. export MAX_SEARCH_SIZE="100" # Max docs per search (1-500, default 100) export REQUEST_TIMEOUT_MS="30000" # HTTP timeout (default 30s) export RETRY_ATTEMPTS="3" # Retry count for transient failures export RETRY_DELAY_MS="1000" # Base delay for exponential backoff export KIBANA_SPACE="" # Kibana space (empty = default space) export AUDIT_ENABLED="true" # Audit logging to stderr (default true) export PII_REDACTION_ENABLED="true" # PII masking (default true)


### 跑

node dist/stdio.mjs


### 连接到克劳德桌面

添加到您的 `claude_desktop_config.json`:

{ "mcpServers": { "elastic": { "command": "node", "args": ["/absolute/path/to/dist/stdio.mjs"], "env": { "ELASTIC_URL": "https://your-deployment.es.us-east-1.aws.found.io", "ELASTIC_API_KEY": "your-api-key" } } } }


______________________________________________________________________

## 5.工具参考

### `discover_cluster`

**从这里开始。** 发现所有可用索引及其字段映射。在构造查询之前,代理应首先调用此函数以了解存在哪些数据。

|参数|类型|默认值|说明|
| ---------------- | ------- | ------- | ---------------------------------------- |
| `pattern` |字符串| `*` |索引模式过滤器(例如。, `logs-*`)    |
| `include_hidden` |布尔值| `false` |包括系统指标(`.kibana`等等)|
| `max_indices` |编号| `50` |获取映射的索引上限|

返回按文档计数排序的索引(最大的第一个),每个索引都有一个简单的列表 `{ field, type }` 映射。

______________________________________________________________________

### `elastic_search`

对Elasticsearch索引执行只读ElasticsearchDSL查询。

|参数|类型|默认值|说明|
| ------------ | ------ | ---------- | -------------------------------------------------- |
| `index` |字符串| _必需的_ |要搜索的索引模式(例如。, `transactions-*`)   |
| `query` |对象| _必需的_ |Elasticsearch DSL查询体|
| `size` |编号| `10` |返回结果(上限为 `MAX_SEARCH_SIZE`)    |
| `time_range` |string |--|时间过滤器表达式(例如。, `now-24h`, `now-7d`) |

这 `time_range` 参数会自动合并到您提供的任何查询形状中——布尔查询、简单查询或空查询都可以。

______________________________________________________________________

### `check_cluster_health`

返回Elasticsearch集群的运行状况。使用此功能诊断降级或红色集群,并在调查查询或性能问题之前验证平台运行状况。

|参数|类型|默认值|说明|
| --------- | ------ | ----------- | ---------------------------------------------------------------------------- |
| `level` |enum| `"cluster"` |粒度: `"cluster"`, `"indices"`,或 `"shards"`更高级别包括每个索引或每个分片的详细信息。 |

退货 `status` (绿色/黄色/红色)、节点计数、分片计数和 `unassigned_shards`.

______________________________________________________________________

### `get_alert_status`

检索Kibana警报规则及其上次执行状态。需要 `KIBANA_URL` 待配置。在调查事件时使用此功能来识别火灾或错误警报。如果出现以下情况,则返回一条优雅的错误消息 `KIBANA_URL` 未设置或Kibana警报插件未启用。

|参数|类型|默认值|说明|
| ------------- | ------ | ------- | ------------------------------------------------------------------------ |
| `severity` |string |--|按严重性标签过滤(例如。, `"critical"`, `"warning"`)                 |
| `rule_type` |string |--|按规则类型ID过滤(例如。, `".es-query"`, `"apm.error_rate"`)         |
| `status` |enum|--|客户端筛选器: `"active"`, `"inactive"`, `"error"`,或 `"ok"` |
| `max_results` |编号| `20` |要返回的最大规则数|

______________________________________________________________________

## 6.提示和资源

服务器暴露MCP **提示** (指导工作流程)和 **资源** (静态参考文档)及其工具。

**提示** 提供LLM可以遵循的分步调查工作流程:

|提示|目的|
| --------------------------------- | -------------------------------------------------------------------- |
| `investigate_failed_transactions` |Elasticsearch中诊断支付失败的指导性工作流程|
| `compliance_audit_query` |构建PCI DSS/AML审计查询的结构化方法|
| `performance_investigation` |逐步调查延迟或吞吐量回归|

**资源** LLM可以阅读的静态参考文件:

|资源|目的|
| ------------------------------- | ----------------------------------------------------------------- |
| `banking_query_patterns` |银行数据的常见Elasticsearch查询模式|
| `elasticsearch_best_practices` |查询优化和索引卫生指南|
| `banking_domain_glossary` |域术语的定义(SWIFT、SEPA、IBAN、流动性等)|

______________________________________________________________________

## 7.安全与合规

此服务器专为受监管的环境而设计。多个防御层确保敏感数据永远不会在不受保护的情况下到达LLM。

### PII补救措施

所有工具响应在离开服务器之前都会经过编校层。检测并屏蔽以下模式:

|数据类型|示例输入|屏蔽输出|
| ----------- | ------------------------ | --------------------- |
|信用卡| `4111 1111 1111 1111` | `**** **** **** 1111` |
|伊班| `DE89370400440532013000` | `DE89****3000` |
|SSN| `123-45-6789` | `***-**-****` |
|电子邮件| `john.doe@bank.com` | `j***@bank.com` |
|电话| `+1 555-123-4567` | `+15***67` |

信用卡检测使用Luhn验证来避免随机16位数字的误报。

### 输入消毒

每个查询在执行前都会扫描危险关键字:

- `script`, `_update`, `_delete`, `_bulk`, `ctx._source`

索引名称根据严格的正则表达式进行验证(`[a-zA-Z0-9\-.*,_]+`)以防止注射。

### 索引访问控制

集 `ALLOWED_INDEX_PATTERNS` 以限制代理可以查询哪些索引。设置后,将拒绝对这些模式之外的索引的任何请求。这强制执行 **最小特权原则** 在MCP层,补充了Elastic的原生RBAC。

### 审计跟踪

每次工具调用都会向stderr生成一个结构化的JSON日志条目:

{ "timestamp": "2026-02-15T10:30:00.000Z", "tool_called": "elastic_search", "input_parameters": "{\"index\":\"transactions-*\",...}", "output_size_bytes": 4521, "redaction_count": 3, "redacted_types": ["credit_card", "email"], "execution_time_ms": 245, "status": "success" }


输入参数被截断为500个字符,以防止敏感数据泄露到日志中。

______________________________________________________________________

## 8.类型系统

工具结果使用 [不匹配](https://www.npmjs.com/package/dismatch) 区分类型安全模式匹配的联合:

import type { Model } from 'dismatch';

type ToolResult = ToolSuccess | ToolError; type ToolSuccess = Model }

;

type ToolError = Model;


这 `type` 现场(`'success'` | `'error'`)是判别式。工具结果上的所有分支都使用 `match()` 从dismatch到详尽的编译时检查模式匹配——否 `if/else` 链条或 `switch` 声明。

______________________________________________________________________

## 9.测试

### 单元和集成测试

服务器附带了一个基于 [Vitest](https://vitest.dev/).测试与其模块位于同一地点 `__tests__/` 目录。

npm test


**单元测试** 单独覆盖单个库模块:

|模块|测试内容|
| ------------------- | ----------------------------------------------------------- |
| `piiRedaction` |模式检测精度、Luhn验证、掩蔽格式|
| `inputSanitizer` |阻止关键字检测、索引名称验证|
| `mappingUtils` |字段扁平化、多字段扩展、重复数据删除|
| `auditLogger` |日志格式、截断、stderr路由|

**集成测试** 端到端练习完整的工具执行管道(输入→ 执行→ 个人身份信息脱敏→ 结果),HTTP层被mock-fns替换:

|工具/模块|涵盖的关键场景|
| ------------------------- | ----------------------------------------------------------------- |
| `discoverCluster` |索引发现、隐藏索引过滤、映射获取失败|
| `checkClusterHealth` |集群/索引/分片级输出,参数传递|
| `getAlertStatus` |规则规范化、KQL过滤器构建、404/403优雅错误|
| `prompts` |快速注册、参数模式、模板呈现|
| `resources` |资源注册、URI解析、内容完整性|

所有82项测试都通过了当前版本。

### 手动重动作演示

`scripts/test-redaction.ts` 是一个自包含的脚本,它针对真实的事务日志负载运行编校引擎,因此您可以在没有Elasticsearch集群的情况下直观地验证掩码格式和准确性。

Stage 1 only — no AWS credentials needed

npm run test:redaction

Both stages — requires AWS credentials and Comprehend access

npm run test:redaction -- --comprehend


**第1阶段** (正则表达式,始终运行)包括:

|PII类型|示例输入|屏蔽输出|注释|
| ----------- | ------------------------ | --------------------- | ------------------------------ |
|信用卡| `4111 1111 1111 1111` | `**** **** **** 1111` |Luhn验证;失败的Luhn数保持不变|
|伊班| `DE89370400440532013000` | `DE89****3000` |                                |
|SSN| `123-45-6789` | `***-**-****` |                                |
|电子邮件| `john.doe@bank.com` | `j***@bank.com` |                                |
|电话| `+31 6 1234 5678` | `+31***78` |                                |

**第2阶段** (`--comprehend`)在第一阶段输出的基础上添加AWS Comprehend NER,捕获正则表达式无法捕获的上下文PII:

|PII类型|示例输入|屏蔽输出|
| -------------- | -------------------------- | ---------------------- |
|全名| `John Doe` | `[REDACTED:NAME]` |
|街道地址| `42 Main Street, Amsterdam`| `[REDACTED:ADDRESS]` |
|IP地址| `192.168.1.101` | `[REDACTED:IP_ADDRESS]`|

脚本在每个阶段后打印摘要,显示 `redactionCount` 和 `redactedTypes`,并明确确认无效的Luhn卡号保持不变。

______________________________________________________________________

## 10.项目结构

src/ ├── lib/ │ ├── types.ts # ToolResult discriminated union │ ├── config.ts # Environment-based configuration loader │ ├── esClient.ts # Elasticsearch/Kibana HTTP client with retry │ ├── toolWrapper.ts # Secure tool pipeline (sanitize → execute → redact → audit) │ ├── piiRedaction.ts # Regex-based PII detection and masking │ ├── inputSanitizer.ts # Query validation and index name sanitization │ ├── auditLogger.ts # Structured audit logging to stderr │ ├── mappingUtils.ts # Elasticsearch mapping flattener │ └── __tests__/ # Unit tests for lib modules ├── tools/ │ ├── index.ts # Tool registry │ ├── discoverCluster.ts # discover_cluster tool │ ├── elasticSearch.ts # elastic_search tool │ ├── checkClusterHealth.ts # check_cluster_health tool │ ├── getAlertStatus.ts # get_alert_status tool │ └── __tests__/ # Integration tests for tools ├── prompts/ │ ├── index.ts # Prompt registry │ ├── investigateFailedTransactions.ts │ ├── complianceAuditQuery.ts │ ├── performanceInvestigation.ts │ └── __tests__/ ├── resources/ │ ├── index.ts # Resource registry │ ├── bankingQueryPatterns.ts │ ├── elasticsearchBestPractices.ts │ ├── bankingDomainGlossary.ts │ └── __tests__/ └── mastra/ └── stdio.ts # MCP server entry point (stdio transport) scripts/ └── test-redaction.ts # Manual PII redaction demo (Stage 1 + optional Stage 2)


______________________________________________________________________

## 11.路线图

### 此仓库-弹性\<v8.18兼容性

Elastic v8.18引入了原生 [MCP构建器](https://www.elastic.co/guide/en/kibana/current/mcp.html) 它将Elasticsearch直接暴露给LLM,而无需自定义服务器。对于已经使用v8.18+的团队来说,该功能涵盖了此仓库提供的大部分内容。

因此,此回购的范围为 **v8.18以下的Elasticsearch部署** --自托管集群、弹性云层或尚无法升级的气隙环境。它将保持在维护模式:错误修复、依赖关系更新和下面未完成的清理项目。这里没有计划使用主要的新工具。

### 新回购-- `elastic-pii-proxy`

Elastic的原生MCP服务器(v8.18+)功能强大,但没有内置的PII编辑或合规控制,这使得它不适合开箱即用的受监管环境。

配套项目将是 **轻量级MCP代理** 它位于Elastic的官方MCP服务器和LLM或运营商之间:

┌─────────────┐ MCP ┌──────────────────┐ MCP ┌─────────────────────┐ │ LLM Agent │ ◄──────────► │ elastic-pii-proxy │ ◄──────────► │ Elastic MCP (v8.18+)│ │ (Claude, │ │ │ │ │ │ GPT, etc) │ │ PII Redaction │ │ Native Elastic MCP │ └─────────────┘ │ Audit Logging │ └─────────────────────┘ │ GDPR/DORA/CCPA │ └──────────────────┘


代理拦截来自Elastic的MCP响应,运行编校管道,发出合规性审计跟踪,并将经过净化的结果转发给LLM,而不需要对Elastic部署本身进行任何更改。

**计划能力:**

- 透明MCP代理——上游Elastic MCP配置不变
- 从该仓库继承的多阶段PII编辑(正则表达式+AWS Comprehend NER)
- 可配置的合规性配置文件(GDPR、DORA、CCPA字段级规则)
- 带有编辑计数和字段来源的结构化审计日志
- 零信任态度:没有原始个人身份信息能够到达LLM

______________________________________________________________________

## 12.许可证

MIT——免费使用、修改和分发。

目录标签

目录标签

金融科技TypeScriptClaude数据安全本地部署ElasticsearchPII脱敏合规

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

4

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP