{"_id":"@cmhk-wwso-sec/team-admin-mcp","_rev":"8-c61f930978ba913d600736b430df8f30","name":"@cmhk-wwso-sec/team-admin-mcp","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.0.0","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.0.0","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"6a57394e7b7a1314d38712df92802ca79852e323","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.0.0.tgz","fileCount":14,"integrity":"sha512-LohKPF+aIVSiR9laR9qr6NmngZc1OX9JnCxmjT4AIpqfAEyzz1t1nBRCgSrQlHrwgFGS7gqHdUGk75eICIRF2A==","signatures":[{"sig":"MEQCIDArjdUkjbKTv2Q0JNt1QF2aP7ZENSPM3TnPZi95V1cfAiBZ9yOJTpUuZgz7DsjWicd22OQpB+1ZoKO1BMaRHyUC/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59198},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"df6ab21a623480fb8068d0db9b22c846f6a39bbd","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.0.0_1778297807995_0.41132292094801537","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.1.0","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.1.0","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"beb489fa39429b60d7bbcd3340b1a934deae29aa","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.1.0.tgz","fileCount":14,"integrity":"sha512-g1N4bFJ/H5tJ+LHyqYAJnLQEDqvqvqAxSWiIYeh7MIhjvlc9UFbwAluonhxmLWJlF8vqqfNv/8WADtJf7EATiQ==","signatures":[{"sig":"MEUCIBklARwW+KVekR4RDjW7p5tW+QmUVwwrL9FJecjYsCPNAiEAuQOyQ6Tl7452rDFklxg6LhNpBgBWi+TopYkj+mEBMhQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61354},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"40566d2bf5329dbee181ea83e69423cf73a38585","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.1.0_1778304769810_0.33362611522490915","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.2.0","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.2.0","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"1ce074493ddacefc50af7e53ce54a4637bc2be0b","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.2.0.tgz","fileCount":14,"integrity":"sha512-4ZniNzjIJ0CgqOr4IqbXTPSBydnOoL8H1yldQPXrnEi+0z6PXIbdcxAYkkmew+CvkEWI6Lv1IMrPYvphoZWA7g==","signatures":[{"sig":"MEYCIQDycYd+H7sdhwmNjtFuVS+r41oOLtYj8D7UY+J9qxaShQIhAO0007g3438z0/MoYYlN1Jgd8jRyZf608joHQ6wEF/n8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62863},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"40566d2bf5329dbee181ea83e69423cf73a38585","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.2.0_1778304943794_0.05107176289416904","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.2.2","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.2.2","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"3cbdb2c5305beccb1a0afda0ce9220d94fddf205","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.2.2.tgz","fileCount":14,"integrity":"sha512-Ddac40bgEdwLod7NC6xlZXnmcnWp8DGMdL2Tw3S8eKTqkjEyhi/h7a+9wb1/SRUZGQjMKHEkBf6cafEYMq582w==","signatures":[{"sig":"MEQCIEuWnlx0tLxl0ZVi89i4tqkVZEwiIATDg+rr7fzdDRRpAiA+wgVzScKtVk4AnOPpbZ2cNYBjPMCgxVY9o5Q2xuy2Ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63743},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"4bcf6a4faa8a9dab2dae035a696d9bf5f2d127d6","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.2.2_1782460879128_0.3909567015243931","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.2.3","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.2.3","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"6ed0cf82ff25209ea958cd7df90810907a0b4b00","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.2.3.tgz","fileCount":14,"integrity":"sha512-/J0v9No6JvV7iIb6AEcKXLYaJEGGeb32tMyzAZ0g2EavyAhpgwQGh5vG2bfinkB3MMrXJpK2HibsvBFf5za1wQ==","signatures":[{"sig":"MEYCIQDU2kp50zic34/47SpEsExYCD2mG5Epk6Js2EnQ+fQyaQIhAMJ/Jpl/wCiRStEAmYrhOlKbZo2B5r2QccOwK07muJTY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63868},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"4bcf6a4faa8a9dab2dae035a696d9bf5f2d127d6","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.2.3_1782461479270_0.3157724390016863","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.4.0","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.4.0","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"9a76cf2da592aa439191fab1e3fad10323345dce","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.4.0.tgz","fileCount":18,"integrity":"sha512-X2jewvGCXHaJo1hztUJE36eo5w5swy73I5RXuZsKK1rq/euZyWcu22zflzChKNLalwpBqpZB4ApI40xmwk2RYQ==","signatures":[{"sig":"MEUCIQDp6cB6oXov0Mq1jo/cYcf5CgdorFrhbsOv6haXz5d6xQIgTV4Mo7bZlJKLSTpeSdcfzjwxQqnfew6uUVJsF7UQOn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102635},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8ddfcc2032dc34f659852c63680c4edcbf0cdf45","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.4.0_1786006203407_0.3877140270720827","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"1.5.0","keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","_id":"@cmhk-wwso-sec/team-admin-mcp@1.5.0","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"bin":{"sec-team-admin-mcp":"dist/index.js"},"dist":{"shasum":"be6a5ae7b83a85271d526cc7335c4c8a9b3b35ba","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-1.5.0.tgz","fileCount":18,"integrity":"sha512-7IwUrE/wCe2HRE/SVDh+uKgweveXDIJ/6bVisKvhpMip0gTxErTeqHZYW8vRLen28VFHDBey7dCJDLpv2KVdLA==","signatures":[{"sig":"MEUCIF2thMmlFEHW6utCeg7+ot8jxPra2WvAcUlGev/IcOQ8AiEAtIAM98TWVHWp1LpIhdsF+32cK2/YdyKqj7x34T6RGxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109099},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8ddfcc2032dc34f659852c63680c4edcbf0cdf45","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"_npmVersion":"11.6.2","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.2","typescript":"^5.4.5","@types/node":"^20.12.5"},"_npmOperationalInternal":{"tmp":"tmp/team-admin-mcp_1.5.0_1787402763635_0.6265261050572215","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@cmhk-wwso-sec/team-admin-mcp","version":"2.0.0","description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","type":"module","main":"dist/index.js","bin":{"sec-team-admin-mcp":"dist/index.js"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","start":"node dist/index.js","dev":"tsx src/index.ts"},"keywords":["mcp","security","admin","appsync","graphql"],"license":"UNLICENSED","publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","zod":"^3.23.8"},"devDependencies":{"@types/node":"^20.12.5","tsx":"^4.7.2","typescript":"^5.4.5"},"engines":{"node":">=18.0.0"},"gitHead":"a791d4c24f86bf256feca8eef99857ea808c83eb","types":"./dist/index.d.ts","_id":"@cmhk-wwso-sec/team-admin-mcp@2.0.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-IWcMOYz+939ohWwRqmAjot7Fi4ZjTpWv7qWLuN5qeCCOoItz/yKWPb6KXHPMtKDlW9T9fphmCheywsXtwuXM2Q==","shasum":"377abe05f98aecf919d09da8ca612c5293b02f04","tarball":"https://registry.npmjs.org/@cmhk-wwso-sec/team-admin-mcp/-/team-admin-mcp-2.0.0.tgz","fileCount":22,"unpackedSize":116246,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC/PiFLhV9AfCTq9OODX8ME+Ve9twI9cyPUVbMa1+DDxAiAHZDD8pSHdJeCqZbNVj0syWMDQsaPt/B0R+yu7gx1+Gg=="}]},"_npmUser":{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"},"directories":{},"maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/team-admin-mcp_2.0.0_1789260966569_0.3587880111992612"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-09T03:36:47.853Z","modified":"2026-09-13T00:56:06.908Z","1.0.0":"2026-05-09T03:36:48.198Z","1.1.0":"2026-05-09T05:32:49.957Z","1.2.0":"2026-05-09T05:35:43.923Z","1.2.2":"2026-06-26T08:01:19.291Z","1.2.3":"2026-06-26T08:11:19.601Z","1.4.0":"2026-08-06T08:50:03.522Z","1.5.0":"2026-08-22T12:46:03.796Z","2.0.0":"2026-09-13T00:56:06.759Z"},"license":"UNLICENSED","keywords":["mcp","security","admin","appsync","graphql"],"description":"MCP Server for Security Team Admin - 通过 MCP 协议访问安全团队管理系统数据","maintainers":[{"name":"sikongwuying","email":"chenjiahui.bit@qq.com"}],"readme":"# Security Team Admin MCP Server\n\n通过 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 协议，让 AI 智能体直接访问安全团队管理系统的数据。智能体可以创建交流记录、查询课程与解决方案、导出周报等，无需人工手动操作后台。\n\n## 架构概览\n\n```\n┌─────────────┐     MCP (stdio)     ┌──────────────────┐     GraphQL     ┌─────────────┐\n│  Kiro IDE   │ ◄──────────────────► │  MCP Server      │ ◄─────────────► │  AppSync    │\n│  (AI Agent) │                      │  (Node.js/TS)    │                 │  (DynamoDB) │\n└─────────────┘                      └──────────────────┘                 └─────────────┘\n```\n\n- **Kiro IDE** 中的 AI 智能体通过 MCP 协议与本 Server 通信\n- **MCP Server** 将 tool 调用转换为 GraphQL 请求发送到 AppSync\n- **AppSync** 使用 Cognito User Pool（OIDC）JWT 认证，操作 DynamoDB 中的数据\n- MCP Server 用长效 **Refresh Token**（30 天）通过 auth-proxy 自动换取短效 JWT（1 小时）并续期\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd mcp-server\nnpm install\n```\n\n### 2. 配置环境变量\n\n`REFRESH_TOKEN` 为必填项（登录管理系统后在「MCP 配置指南」页面获取，有效期 30 天）：\n\n```bash\ncp .env.example .env\n# 编辑 .env 填入你的 REFRESH_TOKEN（endpoint 和 auth-proxy 地址已内置默认值）\n```\n\n### 3. 在 Kiro 中启用\n\n项目已配置好 `.kiro/settings/mcp.json`，重启 Kiro 或在命令面板中搜索 \"MCP\" 重新连接即可。\n\n配置文件位置：`.kiro/settings/mcp.json`。默认运行**已发布的 npm 包**，不需要本地安装依赖：\n\n```json\n{\n  \"mcpServers\": {\n    \"sec-team-admin\": {\n      \"command\": \"npx\",\n      \"args\": [\"@cmhk-wwso-sec/team-admin-mcp@latest\"],\n      \"env\": {\n        \"GRAPHQL_ENDPOINT\": \"https://your-appsync-endpoint/graphql\",\n        \"REFRESH_TOKEN\": \"your-cognito-refresh-token\"\n      },\n      \"disabled\": false,\n      \"autoApprove\": [\n        \"list_security_exchanges\",\n        \"get_security_exchange\",\n        \"list_courses\",\n        \"list_solutions\",\n        \"list_weekly_summaries\"\n      ]\n    }\n  }\n}\n```\n\n> ⚠️ 这个配置跑的是 npm 上的包，**改动 `src/` 不会自动生效**。本地调试请改用下面的 `npx tsx` 方式，或按[更新与发布](#更新与发布)重新发布。\n\n调试本地代码时把 `args` 换成：\n\n```json\n\"args\": [\"tsx\", \"mcp-server/src/index.ts\"]\n```\n\n### 4. 本地测试运行\n\n```bash\ncd mcp-server\nnpx tsx src/index.ts\n```\n\nServer 启动后会通过 stdio 等待 MCP 客户端连接。\n\n## 可用工具 (Tools)\n\n### 交流记录 (SecurityExchange)\n\n| Tool | 说明 | 自动批准 |\n|------|------|----------|\n| `create_security_exchange` | 创建新的交流记录 | ❌ 需确认 |\n| `list_security_exchanges` | 查询交流记录列表（分页） | ✅ |\n| `get_security_exchange` | 获取单条记录详情 | ✅ |\n| `update_security_exchange` | 更新已有记录 | ❌ 需确认 |\n| `delete_security_exchange` | 删除记录 | ❌ 需确认 |\n\n### 课程 (Course)\n\n| Tool | 说明 | 自动批准 |\n|------|------|----------|\n| `list_courses` | 查询课程列表 | ✅ |\n| `create_course` | 创建新课程 | ❌ 需确认 |\n\n### 解决方案 (Solution)\n\n| Tool | 说明 | 自动批准 |\n|------|------|----------|\n| `list_solutions` | 查询解决方案列表 | ✅ |\n\n### 周报 (WeeklySummary)\n\n| Tool | 说明 | 自动批准 |\n|------|------|----------|\n| `list_weekly_summaries` | 查询周报总结列表 | ✅ |\n| `get_weekly_report` | 导出指定周的完整周报（按人分组，含交流记录明细 + 周总结正文） | ✅ |\n| `create_weekly_summary` | 创建周报总结 | ❌ 需确认 |\n\n#### `get_weekly_report` 输出字段\n\n输出与前端周报页面对齐，按创建者分组，每人包含本周交流记录明细和周总结正文。每条交流记录包含：\n\n| 字段 | 说明 |\n|------|------|\n| 交流日期 | 格式 `YYYY/MM/DD` |\n| 客户名称 | 客户名称 + SFDC 公司名称，形如 `浙江白马（SFDC: Shanghai Sunseeker Robotic Technology Co., Ltd.）`；两者相同时不重复输出 |\n| 交流类型 | 如 `安全服务`、`安全合规`、`AI安全` 等 |\n| 行业 / OPP金额 / OPP状态 / 交流者 | 同一行以 ` \\| ` 分隔，字段为空时省略 |\n| 关联解决方案 / 关联Mythos子项目 | 由 ID 解析为名称后输出 |\n| 安全服务明细 | 逐个列出具体服务名称：`交流前AWS服务` / `交流后AWS服务` / `安全最佳实践` / `涉及的安全服务`（内部培训），为空的分类不输出 |\n| 备注 | 输出全文，保留换行 |\n\n参数：\n\n| 参数 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `week` | `this` \\| `last` \\| `next` | `this` | 相对周，以周一为起始 |\n| `weekStart` | `string` | - | 直接指定周起始日期 `YYYY-MM-DD`，传入时忽略 `week` |\n| `person` | `string` | - | 只看某个人，模糊匹配中文姓名或邮箱前缀 |\n| `includeExchanges` | `boolean` | `true` | 设为 `false` 时只返回周总结正文 |\n\n## 使用示例\n\n在 Kiro 对话中，你可以这样使用：\n\n### 创建交流记录\n\n> \"帮我创建一条交流记录：今天下午2点和某某公司的安全团队进行了客户拜访，讨论了 GuardDuty 和 Security Hub 的使用，参与者是张三和李四\"\n\n智能体会自动调用 `create_security_exchange` 工具，填入：\n- exchangeTime: \"2025-05-09 14:00\"\n- exchangeType: \"客户拜访\"\n- customerName: \"某某公司\"\n- preAwsServices: [\"GuardDuty\", \"Security Hub\"]\n- communicators: [\"张三\", \"李四\"]\n\n### 查询记录\n\n> \"最近有哪些交流记录？\"\n\n智能体调用 `list_security_exchanges` 返回最近的记录列表。\n\n### 导出周报\n\n> \"把上周的周报导出来\"\n\n智能体调用 `get_weekly_report`（`week: \"last\"`），返回按人分组的完整周报。也可以指定人或某一周：\n\n> \"看一下陈家慧 2026-08-10 那周的周报\"\n\n对应 `{ person: \"陈家慧\", weekStart: \"2026-08-10\" }`。\n\n## 安全说明\n\n### 认证方式\n\nAppSync 使用 Cognito User Pool（OIDC）JWT 认证，只有登录过管理系统的团队成员才能访问数据。\n\n- 每位成员使用**自己的 Refresh Token**（有效期 30 天），不再共用一把 Key\n- MCP Server 启动后用 Refresh Token 通过 auth-proxy 自动换取 1 小时有效的 JWT，并在过期前自动续期\n- Refresh Token 过期后，重新登录管理系统并在「MCP 配置指南」页面获取新 Token 即可\n\n### 权限控制\n\n- **读操作**（list/get）已加入 `autoApprove`，智能体可直接执行\n- **写操作**（create/update/delete）需要用户在 Kiro 中确认后才会执行\n- 这确保了数据安全：智能体不会在未经确认的情况下修改数据\n\n### 生产环境建议\n\n如果要在生产环境使用，建议：\n\n1. **环境变量管理**：不要将 Refresh Token 提交到代码仓库，仅保存在本机 mcp.json 或 secrets manager\n2. **审计日志**：启用 AppSync 的 CloudWatch 日志记录所有 API 调用\n3. **限流**：在 AppSync 层面配置请求限流\n\n## 开发指南\n\n### 项目结构\n\n```\nmcp-server/\n├── src/\n│   ├── index.ts          # MCP Server 主入口，定义所有 tools 及周报格式化逻辑\n│   ├── graphql-client.ts # GraphQL 客户端封装\n│   ├── cognito-auth.ts   # Cognito Token Provider：Refresh Token 换取/续期 JWT\n│   ├── queries.ts        # GraphQL 查询和变更语句（含字段选择列表）\n│   └── team-members.ts   # 团队成员映射：邮箱 ↔ 中文姓名\n├── dist/                 # 构建产物（npm 发布内容）\n├── package.json\n├── tsconfig.json\n├── .env.example\n└── README.md\n```\n\n> 注意：新增字段时，除了在 `index.ts` 里渲染，还必须把字段加进 `queries.ts` 对应查询的字段选择列表，否则 AppSync 不会返回该字段，渲染结果永远是空。\n\n### 添加新 Tool\n\n1. 在 `queries.ts` 中添加 GraphQL 查询/变更语句\n2. 在 `index.ts` 中使用 `server.tool()` 注册新工具\n3. 定义 Zod schema 作为参数验证\n4. 实现 handler 函数\n\n示例：\n\n```typescript\nserver.tool(\n  'my_new_tool',           // tool 名称\n  '工具描述',              // 描述（智能体用来判断何时调用）\n  {                        // 参数 schema (Zod)\n    param1: z.string().describe('参数说明'),\n    param2: z.number().optional().describe('可选参数'),\n  },\n  async (params) => {      // handler\n    // 调用 GraphQL API\n    const result = await client.query(MY_QUERY, { ...params });\n    return {\n      content: [{ type: 'text', text: '返回结果' }],\n    };\n  }\n);\n```\n\n### 构建生产版本\n\n```bash\nnpm run build\n# 产出在 dist/ 目录\nnode dist/index.js\n```\n\n### 更新与发布\n\n`.kiro/settings/mcp.json` 运行的是 npm 上的 `@cmhk-wwso-sec/team-admin-mcp@latest`，所以改完 `src/` 必须重新发布才能在 Kiro 中生效：\n\n```bash\ncd mcp-server\nnpm version minor          # 新增功能用 minor，修 bug 用 patch\nnpm publish                # prepublishOnly 会自动执行 npm run build\n```\n\n发布后在 Kiro 中重连 MCP server（命令面板搜索 \"MCP\"）。`npx @latest` 有本地缓存，必要时执行 `npx clear-npx-cache` 或指定具体版本号。\n\n## 故障排查\n\n### Server 无法启动\n\n1. 确认 Node.js >= 18（需要原生 fetch 支持）\n2. 确认依赖已安装：`npm install`\n3. 检查 TypeScript 编译：`npx tsc --noEmit`\n\n### API 调用失败\n\n1. 检查 REFRESH_TOKEN 是否过期（30 天有效期），过期后重新登录管理系统获取新 Token\n2. 确认 GraphQL endpoint 和 auth-proxy 地址可达\n3. 查看错误信息中的 GraphQL errors（`Unauthorized` 通常是 token 问题）\n\n### Kiro 中看不到 MCP Server\n\n1. 确认 `.kiro/settings/mcp.json` 配置正确\n2. 在 Kiro 命令面板搜索 \"MCP\" 查看 server 状态\n3. 尝试重启 Kiro 或手动重连 MCP server\n\n## 技术栈\n\n- **Runtime**: Node.js 18+\n- **Language**: TypeScript 5.4+\n- **MCP SDK**: @modelcontextprotocol/sdk 1.12+\n- **Validation**: Zod 3.23+\n- **Backend**: AWS AppSync (GraphQL) + DynamoDB\n- **Auth**: Cognito User Pool (OIDC) JWT，Refresh Token 自动续期\n","readmeFilename":"README.md"}