rebar for VS Code
io.github.navapbc/rebar
Event-sourced ticket tracker + Jira reconciler, exposed as a Python library, CLI, and MCP server.
client:VS Code
transport:stdio
runtime:pypi
Install rebar in VS Code
.vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "rebar-root",
"description": "REBAR_ROOT",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-readonly",
"description": "REBAR_MCP_READONLY",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-allow-llm",
"description": "REBAR_MCP_ALLOW_LLM",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-allow-jira-sync",
"description": "REBAR_MCP_ALLOW_JIRA_SYNC",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-transport",
"description": "REBAR_MCP_TRANSPORT",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-http-host",
"description": "REBAR_MCP_HTTP_HOST",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-http-port",
"description": "REBAR_MCP_HTTP_PORT",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-http-path",
"description": "REBAR_MCP_HTTP_PATH",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-http-allowed-hosts",
"description": "REBAR_MCP_HTTP_ALLOWED_HOSTS",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-http-allowed-origins",
"description": "REBAR_MCP_HTTP_ALLOWED_ORIGINS",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-http-tls-at-edge",
"description": "REBAR_MCP_HTTP_TLS_AT_EDGE",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-allow-unauthenticated-http",
"description": "REBAR_MCP_ALLOW_UNAUTHENTICATED_HTTP",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-enabled",
"description": "REBAR_MCP_AUTH_ENABLED",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-strategies",
"description": "REBAR_MCP_AUTH_STRATEGIES",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-issuer-url",
"description": "REBAR_MCP_AUTH_ISSUER_URL",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-resource-server-url",
"description": "REBAR_MCP_AUTH_RESOURCE_SERVER_URL",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-required-scopes",
"description": "REBAR_MCP_AUTH_REQUIRED_SCOPES",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-static-tokens-file",
"description": "REBAR_MCP_AUTH_STATIC_TOKENS_FILE",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-jwks-uri",
"description": "REBAR_MCP_AUTH_JWT_JWKS_URI",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-issuer",
"description": "REBAR_MCP_AUTH_JWT_ISSUER",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-algorithms",
"description": "REBAR_MCP_AUTH_JWT_ALGORITHMS",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-leeway",
"description": "REBAR_MCP_AUTH_JWT_LEEWAY",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-jwks-refetch-cooldown",
"description": "REBAR_MCP_AUTH_JWT_JWKS_REFETCH_COOLDOWN",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-jwks-timeout",
"description": "REBAR_MCP_AUTH_JWT_JWKS_TIMEOUT",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-expected-typ",
"description": "REBAR_MCP_AUTH_JWT_EXPECTED_TYP",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-jwt-allow-private-jwks-host",
"description": "REBAR_MCP_AUTH_JWT_ALLOW_PRIVATE_JWKS_HOST",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-introspection-endpoint",
"description": "REBAR_MCP_AUTH_INTROSPECTION_ENDPOINT",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-introspection-client-id",
"description": "REBAR_MCP_AUTH_INTROSPECTION_CLIENT_ID",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-introspection-client-secret-env",
"description": "REBAR_MCP_AUTH_INTROSPECTION_CLIENT_SECRET_ENV",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-introspection-allow-private-host",
"description": "REBAR_MCP_AUTH_INTROSPECTION_ALLOW_PRIVATE_HOST",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-introspection-allow-missing-aud",
"description": "REBAR_MCP_AUTH_INTROSPECTION_ALLOW_MISSING_AUD",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-proxy-secret-env",
"description": "REBAR_MCP_AUTH_PROXY_SECRET_ENV",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-proxy-secret-header",
"description": "REBAR_MCP_AUTH_PROXY_SECRET_HEADER",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-proxy-identity-header",
"description": "REBAR_MCP_AUTH_PROXY_IDENTITY_HEADER",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-proxy-scopes",
"description": "REBAR_MCP_AUTH_PROXY_SCOPES",
"password": true
},
{
"type": "promptString",
"id": "rebar-mcp-auth-custom-import",
"description": "REBAR_MCP_AUTH_CUSTOM_IMPORT",
"password": true
}
],
"servers": {
"rebar": {
"type": "stdio",
"command": "uvx",
"args": [
"nava-rebar"
],
"env": {
"REBAR_ROOT": "${input:rebar-root}",
"REBAR_MCP_READONLY": "${input:rebar-mcp-readonly}",
"REBAR_MCP_ALLOW_LLM": "${input:rebar-mcp-allow-llm}",
"REBAR_MCP_ALLOW_JIRA_SYNC": "${input:rebar-mcp-allow-jira-sync}",
"REBAR_MCP_TRANSPORT": "${input:rebar-mcp-transport}",
"REBAR_MCP_HTTP_HOST": "${input:rebar-mcp-http-host}",
"REBAR_MCP_HTTP_PORT": "${input:rebar-mcp-http-port}",
"REBAR_MCP_HTTP_PATH": "${input:rebar-mcp-http-path}",
"REBAR_MCP_HTTP_ALLOWED_HOSTS": "${input:rebar-mcp-http-allowed-hosts}",
"REBAR_MCP_HTTP_ALLOWED_ORIGINS": "${input:rebar-mcp-http-allowed-origins}",
"REBAR_MCP_HTTP_TLS_AT_EDGE": "${input:rebar-mcp-http-tls-at-edge}",
"REBAR_MCP_ALLOW_UNAUTHENTICATED_HTTP": "${input:rebar-mcp-allow-unauthenticated-http}",
"REBAR_MCP_AUTH_ENABLED": "${input:rebar-mcp-auth-enabled}",
"REBAR_MCP_AUTH_STRATEGIES": "${input:rebar-mcp-auth-strategies}",
"REBAR_MCP_AUTH_ISSUER_URL": "${input:rebar-mcp-auth-issuer-url}",
"REBAR_MCP_AUTH_RESOURCE_SERVER_URL": "${input:rebar-mcp-auth-resource-server-url}",
"REBAR_MCP_AUTH_REQUIRED_SCOPES": "${input:rebar-mcp-auth-required-scopes}",
"REBAR_MCP_AUTH_STATIC_TOKENS_FILE": "${input:rebar-mcp-auth-static-tokens-file}",
"REBAR_MCP_AUTH_JWT_JWKS_URI": "${input:rebar-mcp-auth-jwt-jwks-uri}",
"REBAR_MCP_AUTH_JWT_ISSUER": "${input:rebar-mcp-auth-jwt-issuer}",
"REBAR_MCP_AUTH_JWT_ALGORITHMS": "${input:rebar-mcp-auth-jwt-algorithms}",
"REBAR_MCP_AUTH_JWT_LEEWAY": "${input:rebar-mcp-auth-jwt-leeway}",
"REBAR_MCP_AUTH_JWT_JWKS_REFETCH_COOLDOWN": "${input:rebar-mcp-auth-jwt-jwks-refetch-cooldown}",
"REBAR_MCP_AUTH_JWT_JWKS_TIMEOUT": "${input:rebar-mcp-auth-jwt-jwks-timeout}",
"REBAR_MCP_AUTH_JWT_EXPECTED_TYP": "${input:rebar-mcp-auth-jwt-expected-typ}",
"REBAR_MCP_AUTH_JWT_ALLOW_PRIVATE_JWKS_HOST": "${input:rebar-mcp-auth-jwt-allow-private-jwks-host}",
"REBAR_MCP_AUTH_INTROSPECTION_ENDPOINT": "${input:rebar-mcp-auth-introspection-endpoint}",
"REBAR_MCP_AUTH_INTROSPECTION_CLIENT_ID": "${input:rebar-mcp-auth-introspection-client-id}",
"REBAR_MCP_AUTH_INTROSPECTION_CLIENT_SECRET_ENV": "${input:rebar-mcp-auth-introspection-client-secret-env}",
"REBAR_MCP_AUTH_INTROSPECTION_ALLOW_PRIVATE_HOST": "${input:rebar-mcp-auth-introspection-allow-private-host}",
"REBAR_MCP_AUTH_INTROSPECTION_ALLOW_MISSING_AUD": "${input:rebar-mcp-auth-introspection-allow-missing-aud}",
"REBAR_MCP_AUTH_PROXY_SECRET_ENV": "${input:rebar-mcp-auth-proxy-secret-env}",
"REBAR_MCP_AUTH_PROXY_SECRET_HEADER": "${input:rebar-mcp-auth-proxy-secret-header}",
"REBAR_MCP_AUTH_PROXY_IDENTITY_HEADER": "${input:rebar-mcp-auth-proxy-identity-header}",
"REBAR_MCP_AUTH_PROXY_SCOPES": "${input:rebar-mcp-auth-proxy-scopes}",
"REBAR_MCP_AUTH_CUSTOM_IMPORT": "${input:rebar-mcp-auth-custom-import}"
}
}
}
}
VS Code prompts for each input the first time the server starts, so no secret is written to the file. VS Code docs