{"id":37518149,"url":"https://github.com/augmentcode/context-connectors","last_synced_at":"2026-01-16T08:09:58.719Z","repository":{"id":332458270,"uuid":"1133124763","full_name":"augmentcode/context-connectors","owner":"augmentcode","description":"Context Connectors is an open-source library built on the Context Engine SDK that makes diverse sources searchable across agents and apps.","archived":false,"fork":false,"pushed_at":"2026-01-13T23:39:57.000Z","size":186,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-14T01:26:34.043Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/augmentcode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2026-01-12T23:14:12.000Z","updated_at":"2026-01-13T23:40:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/augmentcode/context-connectors","commit_stats":null,"previous_names":["augmentcode/context-connectors"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/augmentcode/context-connectors","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augmentcode%2Fcontext-connectors","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augmentcode%2Fcontext-connectors/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augmentcode%2Fcontext-connectors/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augmentcode%2Fcontext-connectors/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/augmentcode","download_url":"https://codeload.github.com/augmentcode/context-connectors/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augmentcode%2Fcontext-connectors/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-01-16T08:09:58.627Z","updated_at":"2026-01-16T08:09:58.708Z","avatar_url":"https://github.com/augmentcode.png","language":"TypeScript","readme":"# Context Connectors\n\nAn open-source library built on the Context Engine SDK that makes diverse sources searchable across agents and apps.\n\n## Features\n\n- **Multiple Sources**: Index code, documentation, runbooks, schemas, and configs from GitHub, GitLab, BitBucket, or websites\n- **Flexible Storage**: Store indexes locally or in S3 for persistent storage in production apps\n- **Multiple Clients**: CLI search, interactive agent, MCP server (local \u0026 remote)\n- **Incremental Updates**: Only re-index what changed\n- **Smart Filtering**: Respects `.gitignore`, `.augmentignore`, and filters binary/generated files\n\n## Installation\n\n```bash\nnpm install @augmentcode/context-connectors\n```\n\nInstall optional dependencies based on your use case:\n\n```bash\n# For GitHub source\nnpm install @octokit/rest\n\n# For S3 storage\nnpm install @aws-sdk/client-s3\n\n# For MCP server (Claude Desktop)\nnpm install @modelcontextprotocol/sdk\n```\n\n## Quick Start\n\n### 1. Index Your Codebase\n\n```bash\n# Set required environment variables\nexport AUGMENT_API_TOKEN='your-token'\nexport AUGMENT_API_URL='https://your-tenant.api.augmentcode.com/'\n\n# Index a GitHub repository\nexport GITHUB_TOKEN='your-github-token'\nnpx context-connectors index github --owner myorg --repo myrepo -i my-project\n\n# Index a BitBucket repository\nexport BITBUCKET_TOKEN='your-bitbucket-token'\nnpx context-connectors index bitbucket --workspace myworkspace --repo myrepo -i my-project\n\n# Index a website\nnpx context-connectors index website --url https://docs.example.com -i my-docs\n```\n\n### 2. Search\n\n```bash\n# Search and get an AI-generated answer (default)\nnpx context-connectors search \"authentication logic\" -i my-project\n\n# Get raw search results without AI processing\nnpx context-connectors search \"API routes\" -i my-project --raw\n```\n\n### 3. Interactive Agent\n\n```bash\nnpx context-connectors agent -i my-project --provider openai\n```\n\n## CLI Commands\n\n### `index` - Index a data source\n\n```bash\ncontext-connectors index \u003csource\u003e [options]\n```\n\n| Source | Description |\n|--------|-------------|\n| `github` | Index a GitHub repository |\n| `gitlab` | Index a GitLab project |\n| `bitbucket` | Index a Bitbucket repository |\n| `website` | Crawl and index a website |\n\nCommon options for all sources:\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-i, --index \u003cname\u003e` | Index name | - |\n| `--store \u003ctype\u003e` | Store type: `filesystem`, `s3` | `filesystem` |\n| `--store-path \u003cpath\u003e` | Filesystem store path | Platform-specific |\n\n#### GitHub-specific options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--owner \u003cowner\u003e` | Repository owner (required) | - |\n| `--repo \u003crepo\u003e` | Repository name (required) | - |\n| `--ref \u003cref\u003e` | Branch, tag, or commit | `HEAD` |\n\n#### GitLab-specific options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--project \u003cid\u003e` | Project ID or path, e.g., `group/project` (required) | - |\n| `--ref \u003cref\u003e` | Branch, tag, or commit | `HEAD` |\n| `--gitlab-url \u003curl\u003e` | GitLab base URL (for self-hosted) | `https://gitlab.com` |\n\n#### BitBucket-specific options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--workspace \u003cslug\u003e` | Workspace slug (required) | - |\n| `--repo \u003crepo\u003e` | Repository name (required) | - |\n| `--ref \u003cref\u003e` | Branch, tag, or commit | `HEAD` |\n| `--bitbucket-url \u003curl\u003e` | Bitbucket base URL (for Server/Data Center) | `https://api.bitbucket.org/2.0` |\n\n#### Website-specific options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--url \u003curl\u003e` | Website URL to crawl (required) | - |\n| `--max-depth \u003cn\u003e` | Maximum crawl depth | `3` |\n| `--max-pages \u003cn\u003e` | Maximum pages to crawl | `100` |\n| `--include \u003cpatterns...\u003e` | URL patterns to include (glob) | - |\n| `--exclude \u003cpatterns...\u003e` | URL patterns to exclude (glob) | - |\n| `--save-content \u003cdir\u003e` | [Debug] Save crawled content to directory | - |\n\n### `search` - Search indexed content\n\n```bash\ncontext-connectors search \u003cquery\u003e [options]\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-i, --index \u003cspec\u003e` | Index spec: name, path:/path, or s3://bucket/key (required) | - |\n| `--raw` | Return raw search results instead of AI-generated answer | `false` |\n| `--max-chars \u003cn\u003e` | Max output characters (only with `--raw`) | - |\n\n### `agent` - Interactive AI agent\n\n```bash\ncontext-connectors agent [query] [options]\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-i, --index \u003cspecs...\u003e` | Index spec(s): name, path:/path, or s3://bucket/key (required) | - |\n| `--provider \u003cname\u003e` | LLM provider: `openai`, `anthropic`, `google` (required) | - |\n| `--model \u003cname\u003e` | Model to use | Provider default |\n| `--max-steps \u003cn\u003e` | Max agent steps | `10` |\n| `-v, --verbose` | Show tool calls | `false` |\n| `--search-only` | Disable list_files/read_file tools | `false` |\n| `--print` | Non-interactive mode: print response and exit | `false` |\n\nProvider default models:\n- `openai`: `gpt-5-mini`\n- `anthropic`: `claude-haiku-4-5`\n- `google`: `gemini-3-flash-preview`\n\n### `list` - List local indexes\n\n```bash\ncontext-connectors list [options]\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--store-path \u003cpath\u003e` | Store base path | `~/.augment/context-connectors` |\n\n### `delete` - Delete a local index\n\n```bash\ncontext-connectors delete \u003cname\u003e [options]\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--store-path \u003cpath\u003e` | Store base path | `~/.augment/context-connectors` |\n\n\n### `mcp stdio` - Start MCP server with stdio transport\n\n```bash\ncontext-connectors mcp stdio [options]\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-i, --index \u003cspecs...\u003e` | Index spec(s): name, path:/path, or s3://bucket/key | - |\n| `--search-only` | Disable file operations | `false` |\n\n\n### `mcp http` - Start MCP server with HTTP transport\n\nStart an MCP server accessible over HTTP for remote clients.\n\n```bash\ncontext-connectors mcp http [options]\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-i, --index \u003cspecs...\u003e` | Index spec(s): name, path:/path, or s3://bucket/key | - |\n| `--port \u003cnumber\u003e` | Port to listen on | `3000` |\n| `--host \u003chost\u003e` | Host to bind to | `localhost` |\n| `--cors \u003corigins\u003e` | CORS origins (comma-separated or `*`) | - |\n| `--base-path \u003cpath\u003e` | Base path for MCP endpoint | `/mcp` |\n| `--api-key \u003ckey\u003e` | API key for authentication | - |\n| `--store \u003ctype\u003e` | Store type: `filesystem`, `s3` | `filesystem` |\n| `--store-path \u003cpath\u003e` | Store base path | Platform-specific |\n| `--search-only` | Disable file operations | `false` |\n\nExample:\n```bash\n# Start server on port 8080, allow any CORS origin\ncontext-connectors mcp http -i my-project --port 8080 --cors \"*\"\n\n# With authentication\ncontext-connectors mcp http -i my-project --api-key \"secret-key\"\n\n# Or use environment variable for the key\nMCP_API_KEY=\"secret-key\" context-connectors mcp http -i my-project\n```\n\n### About `--search-only`\n\nBy default, all commands provide the `list_files` and `read_file` tools in addition to `search`. Use `--search-only` to disable file operations and provide only the `search` tool.\n\n## Programmatic Usage\n\n### Basic Indexing\n\n```typescript\nimport { Indexer } from \"@augmentcode/context-connectors\";\nimport { GitHubSource } from \"@augmentcode/context-connectors/sources\";\nimport { FilesystemStore } from \"@augmentcode/context-connectors/stores\";\n\nconst source = new GitHubSource({ owner: \"myorg\", repo: \"myrepo\" });\nconst store = new FilesystemStore({ basePath: \".context-connectors\" });\nconst indexer = new Indexer();\n\nconst result = await indexer.index(source, store, \"my-project\");\nconsole.log(`Indexed ${result.filesIndexed} files`);\n```\n\n### Search Client\n\n```typescript\nimport { SearchClient } from \"@augmentcode/context-connectors\";\nimport { FilesystemStore } from \"@augmentcode/context-connectors/stores\";\n\nconst store = new FilesystemStore({ basePath: \".context-connectors\" });\nconst client = new SearchClient({ store, indexName: \"my-project\" });\nawait client.initialize(); // Required before calling search()\n\nconst result = await client.search(\"authentication\");\nconsole.log(result.results);\n```\n\n\u003e **Important:** You must call `await client.initialize()` before calling `search()`. This loads the index state and prepares the client for queries. Calling `search()` or `getMetadata()` before initialization will throw a \"Client not initialized\" error.\n\n### MCP Server\n\n```typescript\nimport { runMCPServer } from \"@augmentcode/context-connectors\";\nimport { FilesystemStore } from \"@augmentcode/context-connectors/stores\";\n\nconst store = new FilesystemStore({ basePath: \".context-connectors\" });\n\nawait runMCPServer({\n  store,\n  indexName: \"my-project\",\n});\n```\n\n### MCP HTTP Server\n\n```typescript\nimport { runMCPHttpServer } from \"@augmentcode/context-connectors\";\nimport { FilesystemStore } from \"@augmentcode/context-connectors/stores\";\n\nconst store = new FilesystemStore({ basePath: \".context-connectors\" });\n\nconst server = await runMCPHttpServer({\n  store,\n  indexName: \"my-project\",\n  port: 3000,\n  host: \"0.0.0.0\",\n  cors: \"*\",\n  apiKey: process.env.MCP_API_KEY,\n});\n\nconsole.log(`MCP server running at ${server.getUrl()}`);\n\n// Graceful shutdown\nprocess.on(\"SIGTERM\", () =\u003e server.stop());\n```\n\n\n## Security Considerations\n\n### MCP HTTP Server Security\n\nThe remote MCP server uses **HTTP without TLS** by default. This has important security implications:\n\n⚠️ **API keys and all data are transmitted in cleartext** when using plain HTTP. This means anyone who can observe network traffic (via MITM attacks, network sniffing, etc.) can capture credentials and data.\n\n#### Recommended Deployments\n\n**For Development (localhost only)**\n\nWhen binding to `localhost` (the default), traffic never leaves your machine:\n\n```bash\n# Safe: localhost only (default)\ncontext-connectors mcp http -i my-project --api-key \"$MCP_API_KEY\"\n```\n\n**For Production: Use a TLS-Terminating Reverse Proxy**\n\nPlace the MCP server behind a reverse proxy that handles TLS. Here's an example with Caddy (which automatically obtains certificates):\n\n```\n# Caddyfile\nmcp.yourdomain.com {\n    reverse_proxy localhost:3000\n}\n```\n\nThen run the MCP server on localhost:\n\n```bash\ncontext-connectors mcp http -i my-project --api-key \"$MCP_API_KEY\" --port 3000\n```\n\n**Alternative: nginx with Let's Encrypt**\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name mcp.yourdomain.com;\n    \n    ssl_certificate /etc/letsencrypt/live/mcp.yourdomain.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/mcp.yourdomain.com/privkey.pem;\n    \n    location /mcp {\n        proxy_pass http://127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        \n        # For SSE streaming\n        proxy_buffering off;\n        proxy_cache off;\n    }\n}\n```\n\n**Alternative: SSH Tunneling**\n\nFor ad-hoc remote access, use SSH port forwarding:\n\n```bash\n# On the server\ncontext-connectors mcp http -i my-project --api-key \"$MCP_API_KEY\"\n\n# On your local machine\nssh -L 3000:localhost:3000 user@server\n\n# Now connect to localhost:3000 on your local machine\n```\n\n#### Network Isolation\n\nIf TLS isn't feasible, ensure the server runs within:\n- A private VPC/network with no public internet access\n- A trusted network segment with firewall rules limiting access\n- A Docker network or Kubernetes cluster with network policies\n\n#### Authentication\n\nAlways use an API key for any non-localhost deployment:\n\n```bash\n# Set via environment variable (recommended - avoids key in shell history)\nexport MCP_API_KEY=\"your-secure-random-key\"\ncontext-connectors mcp http -i my-project\n\n# Or via command line option\ncontext-connectors mcp http -i my-project --api-key \"your-secure-random-key\"\n```\n\nGenerate a secure key with:\n\n```bash\nopenssl rand -base64 32\n```\n\n## Claude Desktop Integration\n\nAdd to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"my-project\": {\n      \"command\": \"npx\",\n      \"args\": [\"context-connectors\", \"mcp\", \"stdio\", \"-i\", \"my-project\"],\n      \"env\": {\n        \"AUGMENT_API_TOKEN\": \"your-token\",\n        \"AUGMENT_API_URL\": \"https://your-tenant.api.augmentcode.com/\"\n      }\n    }\n  }\n}\n```\n\n## Remote MCP Client Integration\n\nThe `mcp http` command exposes your indexed data over HTTP using the MCP Streamable HTTP transport. Any MCP-compatible client can connect.\n\n### Connecting with MCP SDK\n\n```typescript\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n\nconst transport = new StreamableHTTPClientTransport(\n  new URL(\"http://localhost:3000/mcp\"),\n  {\n    requestInit: {\n      headers: {\n        \"Authorization\": \"Bearer your-api-key\"\n      }\n    }\n  }\n);\n\nconst client = new Client({ name: \"my-client\", version: \"1.0.0\" });\nawait client.connect(transport);\n\n// List available tools\nconst tools = await client.listTools();\nconsole.log(tools);\n\n// Call search tool\nconst result = await client.callTool(\"search\", { query: \"authentication\" });\nconsole.log(result);\n```\n\n### Testing with curl\n\n```bash\n# List tools\ncurl -X POST http://localhost:3000/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer your-api-key\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'\n\n# Call search tool\ncurl -X POST http://localhost:3000/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer your-api-key\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"search\",\"arguments\":{\"query\":\"authentication\"}}}'\n```\n\n## GitHub Actions\n\nAutomate indexing on every push:\n\n```yaml\nname: Index Repository\n\non:\n  push:\n    branches: [main]\n\njobs:\n  index:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: \"20\"\n\n      - name: Index repository\n        run: |\n          npx @augmentcode/context-connectors index github \\\n            --owner ${{ github.repository_owner }} \\\n            --repo ${{ github.event.repository.name }} \\\n            --ref ${{ github.sha }} \\\n            -i ${{ github.ref_name }}\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          AUGMENT_API_TOKEN: ${{ secrets.AUGMENT_API_TOKEN }}\n          AUGMENT_API_URL: ${{ secrets.AUGMENT_API_URL }}\n```\n\n## GitHub Webhook Integration\n\nAutomatically index repositories on push using GitHub webhooks. Supports Vercel/Next.js, Express, and custom frameworks.\n\n### Vercel / Next.js App Router\n\n```typescript\n// app/api/webhook/route.ts\nimport { createVercelHandler } from \"@augmentcode/context-connectors/integrations/vercel\";\nimport { S3Store } from \"@augmentcode/context-connectors/stores\";\n\nconst store = new S3Store({ bucket: process.env.INDEX_BUCKET! });\n\nexport const POST = createVercelHandler({\n  store,\n  secret: process.env.GITHUB_WEBHOOK_SECRET!,\n\n  // Only index main branch\n  shouldIndex: (event) =\u003e event.ref === \"refs/heads/main\",\n\n  // Log results\n  onIndexed: (key, result) =\u003e {\n    console.log(`Indexed ${key}: ${result.filesIndexed} files`);\n  },\n});\n```\n\n### Express\n\n```typescript\nimport express from \"express\";\nimport { createExpressHandler } from \"@augmentcode/context-connectors/integrations/express\";\nimport { FilesystemStore } from \"@augmentcode/context-connectors/stores\";\n\nconst app = express();\nconst store = new FilesystemStore({ basePath: \"./indexes\" });\n\n// Must use raw body for signature verification\napp.post(\n  \"/webhook\",\n  express.raw({ type: \"application/json\" }),\n  createExpressHandler({\n    store,\n    secret: process.env.GITHUB_WEBHOOK_SECRET!,\n  })\n);\n\napp.listen(3000);\n```\n\n### Custom Framework\n\n```typescript\nimport {\n  createGitHubWebhookHandler,\n  verifyWebhookSignature\n} from \"@augmentcode/context-connectors/integrations\";\nimport { S3Store } from \"@augmentcode/context-connectors/stores\";\n\nconst store = new S3Store({ bucket: \"my-indexes\" });\nconst handler = createGitHubWebhookHandler({ store, secret: \"...\" });\n\n// In your request handler:\nasync function handleRequest(req: Request) {\n  const signature = req.headers.get(\"x-hub-signature-256\")!;\n  const eventType = req.headers.get(\"x-github-event\")!;\n  const body = await req.text();\n\n  if (!await verifyWebhookSignature(body, signature, secret)) {\n    return new Response(\"Unauthorized\", { status: 401 });\n  }\n\n  const result = await handler(eventType, JSON.parse(body));\n  return Response.json(result);\n}\n```\n\n### GitHub App Setup\n\n1. Go to **Settings \u003e Developer settings \u003e GitHub Apps \u003e New GitHub App**\n2. Set webhook URL to your deployed handler\n3. Generate and save the webhook secret\n4. Set **Repository contents** permission to **Read**\n5. Subscribe to **Push** events\n6. Install the app on your repositories\n\n## Environment Variables\n\n| Variable | Description | Required For |\n|----------|-------------|--------------|\n| `AUGMENT_API_TOKEN` | Augment API token | All operations |\n| `AUGMENT_API_URL` | Augment API URL | All operations |\n| `GITHUB_TOKEN` | GitHub access token | GitHub source |\n| `GITLAB_TOKEN` | GitLab access token | GitLab source |\n| `BITBUCKET_TOKEN` | BitBucket access token | BitBucket source |\n| `GITHUB_WEBHOOK_SECRET` | Webhook signature secret | Webhook integration |\n| `OPENAI_API_KEY` | OpenAI API key | Agent (openai provider) |\n| `ANTHROPIC_API_KEY` | Anthropic API key | Agent (anthropic provider) |\n| `GOOGLE_API_KEY` | Google API key | Agent (google provider) |\n| `AWS_ACCESS_KEY_ID` | AWS access key | S3 store |\n| `AWS_SECRET_ACCESS_KEY` | AWS secret key | S3 store |\n| `CC_S3_BUCKET` | S3 bucket name | S3 store |\n| `CC_S3_ENDPOINT` | Custom S3 endpoint URL (for MinIO, etc.) | S3-compatible storage |\n| `CC_S3_FORCE_PATH_STYLE` | Use path-style URLs (`true`/`false`) | S3-compatible storage |\n| `MCP_API_KEY` | API key for MCP HTTP server authentication | MCP HTTP server |\n| `CONTEXT_CONNECTORS_STORE_PATH` | Override default store location | Optional |\n\n## Data Storage\n\nBy default, indexes are stored in `~/.augment/context-connectors/` on all platforms.\n\nThis location aligns with other Augment CLI state:\n- `~/.augment/session.json` - authentication\n- `~/.augment/settings.json` - user settings\n- `~/.augment/rules/` - user rules\n- `~/.augment/agents/` - user-defined agents\n- `~/.augment/commands/` - custom commands\n\nOverride with `--store-path` or the `CONTEXT_CONNECTORS_STORE_PATH` environment variable.\n\n## Architecture\n\n```\nSources → Indexer → Stores → Clients\n```\n\n- **Sources**: Fetch files from data sources (GitHub, GitLab, BitBucket, Website)\n- **Indexer**: Orchestrates indexing using Augment's context engine\n- **Stores**: Persist index state (Filesystem, S3)\n- **Clients**: Consume the index (CLI, Agent, MCP Server via stdio or HTTP)\n\n## Filtering\n\nFiles are automatically filtered based on:\n\n1. `.augmentignore` - Custom ignore patterns (highest priority)\n2. Built-in filters - Binary files, large files, generated code, secrets\n3. `.gitignore` - Standard git ignore patterns\n\nCreate a `.augmentignore` file to customize:\n\n```\n# Ignore test fixtures\ntests/fixtures/\n\n# Ignore generated docs\ndocs/api/\n\n# Ignore specific files\nconfig.local.json\n```\n\n\u003e **Note:** The `.augmentignore` file must be placed in the **source root directory** (the path passed to the add command), not the current working directory.\n\n## Website Source\n\nThe website source crawls and indexes static HTML content.\n\n### Limitations\n\n- **JavaScript-rendered content is not supported.** Only static HTML is crawled. Single-page applications (SPAs) or pages that require JavaScript to render content will not be fully indexed.\n- Link-based crawling only - pages must be discoverable through links from the starting URL.\n\n## S3-Compatible Storage\n\nWhen using S3-compatible services like MinIO, DigitalOcean Spaces, or Backblaze B2, configure via environment variables:\n\n```bash\nexport CC_S3_BUCKET=my-bucket\nexport CC_S3_ENDPOINT=http://localhost:9000\nexport CC_S3_FORCE_PATH_STYLE=true\nexport AWS_ACCESS_KEY_ID=minioadmin\nexport AWS_SECRET_ACCESS_KEY=minioadmin\n\nnpx context-connectors index github --owner myorg --repo myrepo -i my-project --store s3\n```\n\n| Environment Variable | Description |\n|---------------------|-------------|\n| `CC_S3_BUCKET` | S3 bucket name |\n| `CC_S3_ENDPOINT` | Custom S3 endpoint URL |\n| `CC_S3_FORCE_PATH_STYLE` | Use path-style URLs (`true`/`false`, required for MinIO and most S3-compatible services) |\n\n## License\n\nMIT\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faugmentcode%2Fcontext-connectors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faugmentcode%2Fcontext-connectors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faugmentcode%2Fcontext-connectors/lists"}