[Bug] [BanyanDB] MCP server ignores .env values and silently accepts malformed numeric/TRANSPORT settings
维护者通常 1 天内回复
已经有一个关联 PR 被合并了。
- #1460 来自 @wanjinhao1 —— 已合并
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 35/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 停滞
- 技术栈
- node.js, typescript
- 领域
- backend
调研方向
Start in mcp/src/config.ts and mcp/src/index.ts, where configuration is read and .env is loaded; then inspect the MCP tests and docs/operation/mcp/setup.md mentioned in the issue. Reproduce the three cases from the issue and check how the existing MCP_PORT range validation reports errors. Done means .env values are applied, malformed numeric values and unsupported TRANSPORT values fail clearly, and tests cover each case; a pull request is already open.
由索引模型根据 Issue 内容生成。
描述
Search before asking
- I had searched in the issues and found no similar issues.
Apache SkyWalking Component
BanyanDB (apache/skywalking-banyandb)
What happened
While setting up the BanyanDB MCP server (mcp/, main at adc78b88) I found three config problems. All are silent: the server starts, but with values the user didn't ask for.
- Values in
.envare ignored.src/index.tscallsdotenv.config()in its body, butsrc/config.tsreadsprocess.envat module load, and ES module imports run first. By the time.envis loaded, every exported config value is already fixed. - Numeric settings are parsed leniently.
parseIntstops at the first non-digit, so units or typos are cut off without an error:MCP_MAX_BODY_BYTES=1MiB→ 1 byte,MCP_RATE_LIMIT_WINDOW_MS=60s→ 60 ms,MCP_PORT=3000abc→ 3000. TRANSPORTisn't validated.index.tsonly checksTRANSPORT === 'http', soHTTP,Httpor a typo silently falls back to stdio.
What you expected to happen
Values from .env are applied, and invalid values fail at startup with a clear error. The code already does this for an out-of-range MCP_PORT and for values <= 0, so a value like "1MiB" or "HTTP" should be rejected the same way instead of being silently changed.
How to reproduce
In mcp/ on main (adc78b88):
# problems 2 and 3
cat > _check1.mts <<'EOF'
const c = await import('./src/config.ts');
console.log({ MCP_PORT: c.MCP_PORT, MCP_MAX_BODY_BYTES: c.MCP_MAX_BODY_BYTES, MCP_RATE_LIMIT_WINDOW_MS: c.MCP_RATE_LIMIT_WINDOW_MS, TRANSPORT: c.TRANSPORT });
EOF
MCP_PORT=3000abc MCP_MAX_BODY_BYTES=1MiB MCP_RATE_LIMIT_WINDOW_MS=60s TRANSPORT=HTTP npx tsx _check1.mts
Output:
{ MCP_PORT: 3000, MCP_MAX_BODY_BYTES: 1, MCP_RATE_LIMIT_WINDOW_MS: 60, TRANSPORT: 'HTTP' }
# problem 1 (same import order as src/index.ts)
printf 'MCP_PORT=4555\nTRANSPORT=http\n' > /tmp/test.env
cat > _check2.mts <<'EOF'
import dotenv from 'dotenv';
import { MCP_PORT, TRANSPORT } from './src/config.ts';
dotenv.config({ path: '/tmp/test.env', quiet: true });
console.log({ config: { MCP_PORT, TRANSPORT }, env: { MCP_PORT: process.env.MCP_PORT, TRANSPORT: process.env.TRANSPORT } });
EOF
npx tsx _check2.mts
Output:
{ config: { MCP_PORT: 3000, TRANSPORT: 'stdio' }, env: { MCP_PORT: '4555', TRANSPORT: 'http' } }
Anything else
Happens every time. A possible fix, contained to mcp/src:
- load .env before config.ts is evaluated (e.g.
import 'dotenv/config'as the first import in index.ts, or call dotenv.config() at the top of config.ts); - parse integers strictly (the whole string must be digits) in parsePositiveInteger and for MCP_PORT;
- accept only stdio / http for TRANSPORT (case-insensitive) and fail otherwise;
- unit tests for each case, and a note about .env in docs/operation/mcp/setup.md.
Related history: the review of apache/skywalking-banyandb#1010 noted that a non-numeric MCP_PORT becomes NaN and that the docs mentioned streamable-http while the code only accepts http; #1036 then added the MCP_PORT range check. The cases above (partial numbers like "3000abc"/"1MiB", "HTTP" in a different case, and .env being loaded after config.ts) are still open on main.
Are you willing to submit a pull request to fix on your own?
- Yes I am willing to submit a pull request on my own!
Code of Conduct
- I agree to follow this project's Code of Conduct
- 主要语言
- Java
- 星标
- 25k
- 派生
- 6.6k
- 平均合并
- 12 小时 16 分钟
- 30 天内合并 PR
- 43
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
apache/skywalking 的其他 Issue
-
[Bug] [BanyanDB] MCP client shows a generic error instead of its timeout message when a request times out可能已有人在做 @UchihaIthachi 于 1 天前认领。 未关闭bug database
apache/skywalking#14206 · 已指派 1 人 ·
维护者通常 1 天内回复
-
[Bug] [BanyanDB] MCP HTTP server rejects a lowercase "bearer" Authorization scheme可能已有人在做 @UchihaIthachi 于 3 天前认领。 未关闭bug database
apache/skywalking#14199 · 已指派 1 人 ·
维护者通常 1 天内回复
-
[Bug] Standalone multi-group Measure aggregation returns one row per group可能已有人在做 @hanahmily 于 4 天前认领。 未关闭bug database
apache/skywalking#14198 · 已指派 2 人 ·
维护者通常 1 天内回复
-
chore CLI database
难度 5/5 一周以上 新手友好度 25/100
apache/skywalking#14168 · 2 条评论 ·
维护者通常 1 天内回复
-
[BanyanDB] Stream write callback reports success for events it did not store可能重新可做 关联的 PR 已关闭且未合并。 未关闭
难度 4/5 3-5 天 新手友好度 48/100
apache/skywalking#14158 · 2 条评论 ·
维护者通常 1 天内回复
查看 apache/skywalking 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 86/100
MetricsHub/metricshub-community#1532 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 76/100
asciidoctor/asciidoctor-intellij-plugin#2157 ·
维护者通常 4 天内回复
-
account bug exercise lecture
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复