.do
Mcp

Okrs MCP

Model Context Protocol reference for okrs.do - Objectives and Key Results (Objectives and Key Results (OKR) management

Okrs MCP

Objectives and Key Results (Objectives and Key Results (OKR) management

Overview

The Model Context Protocol (MCP) provides AI models with direct access to okrs.do through a standardized interface.

Installation

pnpm add @modelcontextprotocol/sdk

Configuration

Add to your MCP server configuration:

{
  "mcpServers": {
    "okrs": {
      "command": "npx",
      "args": ["-y", "@dotdo/mcp-server"],
      "env": {
        "DO_API_KEY": "your-api-key"
      }
    }
  }
}

Tools

okrs/invoke

Main tool for okrs.do operations.

{
  "name": "okrs/invoke",
  "description": "Objectives and Key Results (Objectives and Key Results (OKR) management",
  "inputSchema": {
    "type": "object",
    "properties": {
      "operation": {
        "type": "string",
        "description": "Operation to perform"
      },
      "parameters": {
        "type": "object",
        "description": "Operation parameters"
      }
    },
    "required": ["operation"]
  }
}

Usage in AI Models

Claude Desktop

// ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "okrs": {
      "command": "npx",
      "args": ["-y", "@dotdo/mcp-server", "--tool=okrs"],
      "env": {
        "DO_API_KEY": "undefined"
      }
    }
  }
}

OpenAI GPTs

# Custom GPT configuration
tools:
  - type: mcp
    server: okrs
    operations:
      - invoke
      - query
      - execute

Custom Integration

import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'

const transport = new StdioClientTransport({
  command: 'npx',
  args: ['-y', '@dotdo/mcp-server', '--tool=okrs'],
})

const client = new Client(
  {
    name: 'okrs-client',
    version: '1.0.0',
  },
  {
    capabilities: {},
  }
)

await client.connect(transport)

// Call tool
const result = await client.callTool({
  name: 'okrs/invoke',
  arguments: {
    operation: 'okrs',
    parameters: {},
  },
})

Tool Definitions

Available Tools

{
  "tools": [
    {
      "name": "okrs/invoke",
      "description": "Invoke okrs.do",
      "inputSchema": {
        /* ... */
      }
    },
    {
      "name": "okrs/query",
      "description": "Query okrs.do resources",
      "inputSchema": {
        /* ... */
      }
    },
    {
      "name": "okrs/status",
      "description": "Check okrs.do status",
      "inputSchema": {
        /* ... */
      }
    }
  ]
}

Resources

Available Resources

{
  "resources": [
    {
      "uri": "okrs://config",
      "name": "Okrs Configuration",
      "mimeType": "application/json"
    },
    {
      "uri": "okrs://docs",
      "name": "Okrs Documentation",
      "mimeType": "text/markdown"
    }
  ]
}

Prompts

Pre-configured Prompts

{
  "prompts": [
    {
      "name": "okrs-quick-start",
      "description": "Quick start guide for okrs.do",
      "arguments": []
    },
    {
      "name": "okrs-best-practices",
      "description": "Best practices for okrs.do",
      "arguments": []
    }
  ]
}

Examples

Basic Usage

// AI model calls tool via MCP
mcp call okrs/manage

With Parameters

// Call with parameters
await mcp.callTool('okrs/invoke', {
  operation: 'process',
  parameters: {
    // Operation-specific parameters
  },
  options: {
    timeout: 30000,
  },
})

Error Handling

try {
  const result = await mcp.callTool('okrs/invoke', {
    operation: 'process',
  })
  return result
} catch (error) {
  if (error.code === 'TOOL_NOT_FOUND') {
    console.error('Okrs tool not available')
  } else {
    throw error
  }
}

AI Integration Patterns

Agentic Workflows

// AI agent uses okrs.do in workflow
const workflow = {
  steps: [
    {
      tool: 'okrs/invoke',
      operation: 'analyze',
      input: 'user-data',
    },
    {
      tool: 'okrs/process',
      operation: 'transform',
      input: 'analysis-result',
    },
  ],
}

Chain of Thought

AI models can reason about okrs.do operations:

User: "I need to process this data"

AI: "I'll use the okrs tool to:
1. Validate the data format
2. Process it through okrs.do
3. Return the results

Let me start..."

[Calls: mcp call okrs/manage]

Server Implementation

Custom MCP Server

import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

const server = new Server(
  {
    name: 'okrs-server',
    version: '1.0.0',
  },
  {
    capabilities: {
      tools: {},
      resources: {},
      prompts: {},
    },
  }
)

// Register tool
server.setRequestHandler('tools/call', async (request) => {
  if (request.params.name === 'okrs/invoke') {
    // Handle okrs.do operation
    return {
      content: [
        {
          type: 'text',
          text: JSON.stringify(result),
        },
      ],
    }
  }
})

const transport = new StdioServerTransport()
await server.connect(transport)

Best Practices

  1. Tool Design - Keep tools focused and single-purpose
  2. Error Messages - Provide clear, actionable errors
  3. Documentation - Include examples in tool descriptions
  4. Rate Limiting - Implement appropriate limits
  5. Security - Validate all inputs from AI models
  6. Monitoring - Track tool usage and errors