{"id":46144646,"url":"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor","last_synced_at":"2026-03-02T07:02:24.936Z","repository":{"id":333961295,"uuid":"1087906259","full_name":"growthspace-engineering/gs-mcp-proxy-pii-redactor","owner":"growthspace-engineering","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-28T22:09:26.000Z","size":8657,"stargazers_count":5,"open_issues_count":22,"forks_count":0,"subscribers_count":0,"default_branch":"beta","last_synced_at":"2026-03-01T01:32:03.484Z","etag":null,"topics":["audit-logging","data-masking","mcp","mcp-proxy","middleware","nodejs","pii-redaction","proxy","security","sse","stdio","streamable-http","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/growthspace-engineering.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-01T22:13:00.000Z","updated_at":"2026-02-18T17:25:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor","commit_stats":null,"previous_names":["growthspace-engineering/gs-mcp-proxy-pii-redactor"],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/growthspace-engineering/gs-mcp-proxy-pii-redactor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/growthspace-engineering%2Fgs-mcp-proxy-pii-redactor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/growthspace-engineering%2Fgs-mcp-proxy-pii-redactor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/growthspace-engineering%2Fgs-mcp-proxy-pii-redactor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/growthspace-engineering%2Fgs-mcp-proxy-pii-redactor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/growthspace-engineering","download_url":"https://codeload.github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/tar.gz/refs/heads/beta","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/growthspace-engineering%2Fgs-mcp-proxy-pii-redactor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29994618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audit-logging","data-masking","mcp","mcp-proxy","middleware","nodejs","pii-redaction","proxy","security","sse","stdio","streamable-http","typescript"],"created_at":"2026-03-02T07:02:21.787Z","updated_at":"2026-03-02T07:02:24.877Z","avatar_url":"https://github.com/growthspace-engineering.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/growthspace-engineering\" target=\"blank\"\u003e\u003cimg src=\"GS-logo.svg\" width=\"250\" alt=\"GrowthSpace Logo\" /\u003e\n  \u003c/a\u003e\n  \u003ch2 align=\"center\"\u003e\n    @growthspace-engineering/gs-mcp-proxy-pii-redactor\n  \u003c/h2\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/releases\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/v/release/growthspace-engineering/gs-mcp-proxy-pii-redactor?display_name=tag\u0026label=latest\u0026logo=npm\u0026color=CB3837\u0026style=for-the-badge\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/tags\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/v/tag/growthspace-engineering/gs-mcp-proxy-pii-redactor?filter=*-beta*\u0026label=beta\u0026logo=npm\u0026color=CB3837\u0026style=flat-square\"\u003e\n\u003c/a\u003e\n\u003c!-- \u003ca href=\"https://growthspace-engineering.github.io/gs-mcp-proxy-pii-redactor/tests/branch/main/combined-coverage/\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https://growthspace-engineering.github.io/gs-mcp-proxy-pii-redactor/tests/branch/main/combined-coverage/badge.json\u0026label=main%20coverage\u0026style=flat-square\"\u003e\n\u003c/a\u003e --\u003e\n\u003ca href=\"https://growthspace-engineering.github.io/gs-mcp-proxy-pii-redactor/tests/branch/beta/combined-coverage/\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https://growthspace-engineering.github.io/gs-mcp-proxy-pii-redactor/tests/branch/beta/combined-coverage/badge.json\u0026label=coverage\u0026style=flat-square\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/semantic-release/semantic-release\"\u003e\u003cimg src=\"https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg\"\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\u003ca href=\"#contributors-\"\u003e\u003cimg src=\"https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square\" alt=\"All Contributors\"\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nMCP Proxy with PII Redaction\n\u003c/p\u003e\n\u003chr\u003e\n\nAn MCP proxy that aggregates multiple MCP servers behind a single HTTP entrypoint, with built-in PII redaction capabilities.\n\n## Features\n\n- **Proxy multiple MCP servers**: Aggregate tools, prompts, and resources from many servers through a single HTTP endpoint\n- **Multiple transport types**: Support for `stdio`, `sse`, and `streamable-http` client transports\n- **Server transport options**: Serve via Server-Sent Events (SSE) or streamable HTTP\n- **PII redaction**: Automatic redaction of PII using GCS-backed dictionaries and generic pattern matching\n- **Tool filtering**: Allow or block specific tools per server configuration\n- **Authentication**: Bearer token authentication with per-server or global configuration\n- **Audit logging**: Optional verbose audit logging for redaction operations\n- **Flexible configuration**: JSON configuration with environment variable interpolation\n\n## Documentation\n\n- [IDE setup](docs/ide/README.md)\n  - [Cursor](docs/ide/cursor.md)\n  - [Claude Desktop](docs/ide/claude.md)\n  - [Other IDEs](docs/ide/other.md)\n- [Configuration](docs/configuration.md) - Configuration reference and examples\n- [Usage](docs/usage.md) - CLI options, endpoints, authentication, and tool filtering\n- [PII Redaction](docs/redaction.md) - Redaction setup and configuration\n- [Deployment](docs/deployment.md) - Production deployment\n- [Docker Usage](docs/docker.md) - Build, run, and configure the Docker image\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js \u003e= 20 (or equivalent bun or pnpm)\n\n### Option 1 — Run with stdio (recommended)\n\nIntegrate directly with your IDE over stdio. No global install required.\n\nBefore configuring your IDE, initialize a default config file (creates `~/gs-mcp-proxy/config.json` by default):\n```bash\ngs-mcp-proxy --init\n# or without installing globally\nnpx -y @growthspace-engineering/gs-mcp-proxy-pii-redactor --init\n```\nSee [Usage](docs/usage.md) to customize the destination via `--init-dest`.\n\n- Cursor: see [docs/ide/cursor.md](docs/ide/cursor.md) (stdio section)\n- Claude Desktop: see [docs/ide/claude.md](docs/ide/claude.md) (stdio section)\n- Other IDEs: see [docs/ide/other.md](docs/ide/other.md)\n\n### Option 2 — Run locally before IDE integration (SSE/HTTP)\n\n1. Install the module globally:\n   ```bash\n   npm install -g @growthspace-engineering/gs-mcp-proxy-pii-redactor\n   ```\n2. Initialize a default config file (creates `~/gs-mcp-proxy/config.json` by default):\n   ```bash\n   gs-mcp-proxy --init\n   ```\n   See [Usage](docs/usage.md) to customize the destination via `--init-dest`.\n3. Run the CLI (with or without a config file):\n   ```bash\n   gs-mcp-proxy --config ~/gs-mcp-proxy/config.json\n   # or (uses ./config.json by default if present)\n   gs-mcp-proxy\n   ```\n4. Connect your IDE using `mcp-remote` (SSE or streamable HTTP):\n   - Cursor: see [docs/ide/cursor.md](docs/ide/cursor.md) (SSE/HTTP sections)\n   - Claude Desktop: see [docs/ide/claude.md](docs/ide/claude.md) (SSE/HTTP sections)\n\nDeveloper setup (clone, build, run locally) has moved to [CONTRIBUTING.md](CONTRIBUTING.md).\n\n### Minimal Configuration (for local server)\n\n```json\n{\n  \"mcpProxy\": {\n    \"baseURL\": \"http://localhost:8084\",\n    \"addr\": \":8084\",\n    \"name\": \"MCP Proxy with PII Redaction\",\n    \"version\": \"1.0.0\",\n    \"type\": \"sse\"\n  },\n  \"mcpServers\": {\n    \"github\": {\n      \"transportType\": \"streamable-http\",\n      \"url\": \"https://api.githubcopilot.com/mcp/\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${GITHUB_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\nSee [Configuration](docs/configuration.md) for full configuration reference and examples.\n\n## Testing\n\n```bash\n# Unit tests\nnpm test\n\n# E2E tests (requires GITHUB_TOKEN)\nexport GITHUB_TOKEN=your_token_here\nnpm run test:e2e\n```\n\n**Note:** All E2E tests require a valid `GITHUB_TOKEN` environment variable. The test suite validates both SSE and Streamable HTTP transport options.\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n## Code of Conduct\n\nThis project adheres to a Code of Conduct. Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) before contributing.\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://thatkookooguy.kibibit.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10427304?v=4?s=100\" width=\"100px;\" alt=\"Neil Kalman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNeil Kalman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/commits?author=thatkookooguy\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#question-thatkookooguy\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e \u003ca href=\"#blog-thatkookooguy\" title=\"Blogposts\"\u003e📝\u003c/a\u003e \u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/commits?author=thatkookooguy\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-thatkookooguy\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#infra-thatkookooguy\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#maintenance-thatkookooguy\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#research-thatkookooguy\" title=\"Research\"\u003e🔬\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Romarionijim\"\u003e\u003cimg src=\"https://github.com/Romarionijim.png?s=100\" width=\"100px;\" alt=\"Romario Nijim\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRomario Nijim\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-Romarionijim\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-Romarionijim\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#research-Romarionijim\" title=\"Research\"\u003e🔬\u003c/a\u003e \u003ca href=\"#question-Romarionijim\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://shaieliyahu.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/74975334?v=4?s=100\" width=\"100px;\" alt=\"shai eliyahu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eshai eliyahu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/pulls?q=is%3Apr+reviewed-by%3Aaheua10\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.gla.co.il\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/23203489?v=4?s=100\" width=\"100px;\" alt=\"Gal Amitai\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGal Amitai\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/pulls?q=is%3Apr+reviewed-by%3AGalAmitai\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/yevgenim\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/29144954?v=4?s=100\" width=\"100px;\" alt=\"Yevgeni Mumblat\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYevgeni Mumblat\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-yevgenim\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Utkarsh9571\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/205407787?v=4?s=100\" width=\"100px;\" alt=\"Utkarsh9571\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eUtkarsh9571\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/commits?author=Utkarsh9571\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#example-Utkarsh9571\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/mNarraMine\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45209420?v=4?s=100\" width=\"100px;\" alt=\"Mr. Narra Mine\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMr. Narra Mine\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/pulls?q=is%3Apr+reviewed-by%3AmNarraMine\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/apps/allcontributors\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/in/23186?v=4?s=100\" width=\"100px;\" alt=\"allcontributors[bot]\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eallcontributors[bot]\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/commits?author=allcontributors[bot]\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/gr0wth-b0t\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/94817429?v=4?s=100\" width=\"100px;\" alt=\"gr0wth-b0t\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003egr0wth-b0t\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/commits?author=gr0wth-b0t\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/rshachor-gs\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/113505106?v=4?s=100\" width=\"100px;\" alt=\"Riki Shachor\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRiki Shachor\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/pulls?q=is%3Apr+reviewed-by%3Arshachor-gs\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/katerina-semikina\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/26429062?v=4?s=100\" width=\"100px;\" alt=\"katerina-semikina\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ekaterina-semikina\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/growthspace-engineering/gs-mcp-proxy-pii-redactor/pulls?q=is%3Apr+reviewed-by%3Akaterina-semikina\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n### How It Works\n\nWhen you merge a pull request, our GitHub Actions workflow automatically:\n- Adds the contributor to the `.all-contributorsrc` configuration\n- Updates the Contributors section in this README\n- Creates a commit with the changes\n\nYou can also manually add contributors using:\n```bash\nnpm run contributors:add\n```\nand the allcontributors cli will prompt you for the contribution details.\n\n## Acknowledgments\nThis project was inspired by the following projects:\n- [TBXark/mcp-proxy](https://github.com/TBXark/mcp-proxy): a Go-based MCP proxy server that aggregates multiple MCP servers through a single HTTP endpoint.\n- [nestjs/nest](https://github.com/nestjs/nest): a progressive Node.js framework for building server-side applications.\n\n## License\n\nMIT 2025\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrowthspace-engineering%2Fgs-mcp-proxy-pii-redactor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrowthspace-engineering%2Fgs-mcp-proxy-pii-redactor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrowthspace-engineering%2Fgs-mcp-proxy-pii-redactor/lists"}