GitHubDashboard

SDKs

Official client libraries for TypeScript and Python. Integrate Squidward into your applications with type-safe, production-ready SDKs.

TypeScript
@squidward/sdk
v1.0.0

Full TypeScript support with type definitions, async/await, and tree-shaking.

npm install @squidward/sdk
bash
Python
squidward
v1.0.0

Async-first Python SDK with type hints, Pydantic models, and httpx.

pip install squidward
bash

Quick Start

import { Squidward } from '@squidward/sdk'

// Initialize the client
const client = new Squidward({
  token: process.env.SQUIDWARD_TOKEN,
})

// List available MCPs
const mcps = await client.mcps.list()

// Invoke an MCP tool
const result = await client.mcps.invoke('github', 'search_repos', {
  query: 'mcp governance',
  limit: 10,
})

// Simulate a policy
const simulation = await client.policies.simulate({
  mcp: 'github',
  tool: 'create_issue',
  input: { title: 'New feature request' },
})
typescript

Features

Automatic Retries

Built-in retry logic with exponential backoff for transient failures.

Type Safety

Full type definitions for all API responses and request parameters.

Streaming Support

Stream large responses and real-time events efficiently.

Error Handling

Typed error classes with detailed policy denial information.

MCP Operations

List MCPs

// List all available MCPs
const mcps = await client.mcps.list()

// Filter by category
const devTools = await client.mcps.list({
  category: 'source_control',
})

// Get a specific MCP
const github = await client.mcps.get('github')
typescript

Invoke Tools

// Invoke an MCP tool
const result = await client.mcps.invoke('github', 'search_repos', {
  query: 'mcp',
  limit: 10,
})

// With options
const result = await client.mcps.invoke(
  'vercel',
  'list_deployments',
  { projectId: 'prj_xxx' },
  {
    timeout: 30000,
    simulateOnly: false,
  }
)
typescript

Policy Operations

// Simulate a policy
const simulation = await client.policies.simulate({
  mcp: 'github',
  tool: 'create_pull_request',
  input: {
    title: 'Add new feature',
    body: 'This PR adds...',
  },
})

if (simulation.decision === 'deny') {
  console.log('Policy denied:', simulation.reason)
  console.log('Matched policies:', simulation.matchedPolicies)
}

// List policies
const policies = await client.policies.list()

// Get policy details
const policy = await client.policies.get('pol_xxx')
typescript

Error Handling

import { 
  Squidward, 
  PolicyDeniedError, 
  AuthenticationError,
  RateLimitError 
} from '@squidward/sdk'

try {
  const result = await client.mcps.invoke('github', 'create_issue', {
    title: 'Bug report',
  })
} catch (error) {
  if (error instanceof PolicyDeniedError) {
    console.log('Policy denied:', error.reason)
    console.log('Recommendations:', error.recommendations)
  } else if (error instanceof AuthenticationError) {
    console.log('Invalid or expired token')
  } else if (error instanceof RateLimitError) {
    console.log('Rate limited, retry after:', error.retryAfter)
  }
}
typescript

Configuration

const client = new Squidward({
  // Required
  token: process.env.SQUIDWARD_TOKEN,
  
  // Optional
  baseUrl: 'https://gateway.squidward.app', // Custom gateway URL
  timeout: 30000, // Request timeout in ms
  retries: 3, // Number of retries
  
  // Logging
  debug: process.env.NODE_ENV === 'development',
  
  // Custom fetch (for edge runtimes)
  fetch: customFetch,
})
typescript

Next Steps