Skip to content
VS Code

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

rebar in other clients