Assay — AI Agent Integration Guides
Description: Integration guides for Claude Code, Cursor, Windsurf, Cline, and OpenCode — use Assay's 40+ modules in your AI coding agent.

# AI Agent Integration Guides

Use Assay's 40+ modules in Claude Code, Cursor, Windsurf, Cline, and OpenCode.

## Two Integration Approaches

There are two ways to bring Assay's Kubernetes-native modules into your AI coding agent:

Approach | How It Works | Status
--- | --- | ---
Today: `assay context` | Run `assay context "<query>"` to get prompt-ready module docs. Paste output into your agent's context window or reference SKILL.md in your project. | Available now
Coming in v0.6.0: `assay mcp-serve` | Assay becomes a native MCP server. Your agent queries modules, generates scripts, and executes checks — all through the MCP protocol. One config line per agent. | Coming Soon

## Claude Code

Config path: `.mcp.json` in project root

### Today: `assay context` Integration

Download SKILL.md into your project and reference it from `AGENTS.md`. Claude Code reads `AGENTS.md` automatically, giving it full knowledge of Assay's modules and patterns.

    # Get module docs for Claude Code
    assay context "grafana"          # paste into Claude Code prompt
    assay context "kubernetes auth"  # get k8s module docs
    assay context "jwt signing"      # get crypto module docs
    assay context "vault secrets"    # get vault module docs

### Coming Soon (v0.6.0): MCP Server

    // .mcp.json (project root)
    {
      "mcpServers": {
        "assay": {
          "command": "assay",
          "args": ["mcp-serve"]
        }
      }
    }

Once `assay mcp-serve` ships, Claude Code will query Assay's modules natively — no copy-pasting context, no SKILL.md needed.

## Cursor

Config path: `.cursor/mcp.json` in project root

### Today: `assay context` Integration

Use `assay context` from your terminal and paste the output into Cursor's chat. Cursor reads the same MCP config format as Claude Code.

    # Get module docs for Cursor
    assay context "prometheus"       # monitoring module docs
    assay context "argocd sync"      # GitOps module docs
    assay context "s3 storage"       # S3 module docs

### Coming Soon (v0.6.0): MCP Server

    // .cursor/mcp.json (project root)
    {
      "mcpServers": {
        "assay": {
          "command": "assay",
          "args": ["mcp-serve"]
        }
      }
    }

Cursor and Claude Code share identical MCP config format. The same `assay mcp-serve` command works for both — just different file paths.

## Windsurf

Config path: `~/.codeium/windsurf/mcp_config.json` (global only)

### Today: `assay context` Integration

Run `assay context` from Windsurf's integrated terminal and paste output into the AI chat panel. Windsurf supports terminal access for running CLI commands.

    # Get module docs for Windsurf
    assay context "traefik"          # ingress/routing module docs
    assay context "certmanager"      # TLS certificate docs
    assay context "harbor registry"  # container registry docs

### Coming Soon (v0.6.0): MCP Server

    // ~/.codeium/windsurf/mcp_config.json (global config)
    {
      "mcpServers": {
        "assay": {
          "serverUrl": "http://localhost:9999",
          "command": "assay",
          "args": ["mcp-serve", "--port", "9999"]
        }
      }
    }

Windsurf uses `serverUrl` (HTTP transport) instead of `url` — different from other agents. It also uses a global config only (no per-project config).

## Cline

Config path: VS Code settings (extension-managed)

### Today: `assay context` Integration

Use `assay context` from VS Code's integrated terminal. Cline can read terminal output when you paste it into the chat, or you can pipe it to a file and reference it.

    # Get module docs for Cline
    assay context "loki logging"     # log aggregation docs
    assay context "temporal workflow" # workflow orchestration docs
    assay context "unleash flags"    # feature flag docs

### Coming Soon (v0.6.0): MCP Server

    // VS Code settings.json (Cline extension)
    {
      "cline.mcpServers": {
        "assay": {
          "command": "assay",
          "args": ["mcp-serve"],
          "autoApprove": ["assay_context", "assay_modules"]
        }
      }
    }

Cline has an `autoApprove` field for trusted tool calls. Add Assay's tools to skip manual approval for `assay context` and `assay modules` queries.

## OpenCode

Config path: `opencode.json` in project root

### Today: `assay context` Integration

Install the Assay skill directly into your OpenCode project. The skill gives your agent full knowledge of all 40+ modules, client patterns, and built-in functions.

    # Install Assay skill for OpenCode
    npx skills add developerinlondon/agent-skills

    # Then use assay context from agent prompts
    assay context "crossplane"       # infrastructure-as-code docs
    assay context "velero backup"    # disaster recovery docs
    assay context "zitadel identity" # OIDC identity management docs

### Coming Soon (v0.6.0): MCP Server

    // opencode.json (project root)
    {
      "mcp": {
        "assay": {
          "command": "assay",
          "args": ["mcp-serve"]
        }
      }
    }

OpenCode uses the `mcp` key (not `mcpServers`) — a unique format. This is the agent running your session right now!

## Quick Reference

Agent | Config File | Format | MCP Status
--- | --- | --- | ---
Claude Code | `.mcp.json` | JSON `mcpServers` | Coming in v0.6.0
Cursor | `.cursor/mcp.json` | JSON `mcpServers` | Coming in v0.6.0
Windsurf | `~/.codeium/windsurf/mcp_config.json` | JSON `serverUrl` | Coming in v0.6.0
Cline | VS Code extension settings | JSON `autoApprove` | Coming in v0.6.0
OpenCode | `opencode.json` | JSON `mcp` key | Coming in v0.6.0

## Common Workflow (All Agents)

Regardless of which agent you use, the workflow today is the same:

    # 1. Find the right module
    assay context "what you need"

    # 2. Read the output — it shows method signatures and return types
    # 3. Write your Lua script using the client pattern:

    local mod = require("assay.<module>")
    local c = mod.client("http://service:port", { token = "..." })
    local result = c:some_method()
    assert.not_nil(result)

    # 4. Run it
    assay script.lua

All 23 stdlib modules follow the same pattern: `require`, `client()`, `c:method()`. Learn one, know them all. Run `assay modules` to see the full list of 40+ available modules.