Skip to main content
Glama

Captain Data MCP API

A Model Context Protocol (MCP) server for Captain Data tools, designed to work with ChatGPT and other AI assistants. This API provides a clean interface for LinkedIn data extraction and search capabilities through Captain Data's powerful scraping engine.

Features

  • MCP-compliant API for seamless integration with AI assistants

  • Dual authentication system - API key headers or session tokens

  • Comprehensive tool suite for LinkedIn data extraction and search

  • Production-ready with proper error handling, logging, and monitoring

  • TypeScript-first with strict type checking and validation

  • Fastify-powered for high performance and extensibility

  • Redis integration for session management with in-memory fallback

  • Interactive API documentation with OpenAPI/Swagger

  • Comprehensive testing with Jest and integration tests

Related MCP server: LinkedIn MCP Server

Authentication

The API supports two authentication methods:

  1. Direct API Key: Set your Captain Data API key in the X-API-Key header

  2. Session Tokens: Use the /auth endpoint to get a session token, then include it in the Authorization: Bearer <token> header

Local Development

Prerequisites

  • Node.js 16+

  • npm or yarn

  • Captain Data API key

  • Redis (optional, falls back to in-memory storage)

Setup

  1. Install dependencies:

npm install
  1. Create environment configuration:

cp env.example .env
# Edit .env with your Captain Data API key and other settings
  1. Start the development server:

npm run dev

The server will be available at http://localhost:3000.

Development Scripts

# Start development server with hot reload
npm run dev

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Type checking
npm run type-check

# Build for production
npm run build

# Generate OpenAPI documentation
npm run generate:openapi
npm run generate:openapi:gpt

Production Deployment

Environment Variables

Variable

Required

Default

Description

CD_API_BASE

-

Captain Data API base URL

NODE_ENV

development

Environment (development/production/test)

PORT

3000

Server port

LOG_LEVEL

info

Logging level (error, warn, info, debug)

RATE_LIMIT_MAX

100

Maximum requests per time window

RATE_LIMIT_TIME_WINDOW

1 minute

Rate limit time window

API_TIMEOUT

30000

API request timeout in milliseconds

MAX_RETRIES

2

Maximum retry attempts for failed requests

RETRY_DELAY

1000

Delay between retries in milliseconds

REDIS_URL

-

Redis connection URL for session storage

SENTRY_DSN

-

Sentry DSN for error tracking

Production Checklist

Before deploying to production, ensure:

  • Environment variables are properly configured

  • All tests pass: npm test

  • Type checking passes: npm run type-check

  • Rate limiting is configured appropriately

  • Logging level is set to info or warn

  • Health check endpoint is monitored

  • Error tracking is set up (Sentry recommended)

  • Redis is configured for session management (optional)

Monitoring & Observability

The API provides comprehensive monitoring capabilities:

  • Health Check: GET /health - Returns system status and uptime

  • Request Logging: All requests are logged with unique request IDs

  • Error Tracking: Structured error responses with detailed context

  • Performance Metrics: Response times and execution metrics

  • Sentry Integration: Automatic error reporting and performance monitoring

API Endpoints

Core Endpoints

  • GET /health - Health check and system status

  • GET /introspect - List available tools (basic mode)

  • GET /introspect?v=full - List all available tools (full mode)

  • POST /auth - Generate session token from API key

  • POST /tools/:alias - Execute a specific tool

Documentation

  • GET /docs - Interactive API documentation (Swagger UI)

  • GET /docs/json - OpenAPI specification

  • GET /openapi.json - Raw OpenAPI specification

  • GET /openapi.gpt.json - GPT-compatible OpenAPI specification

Available Tools

Tool Naming Convention

Pattern

Usage

Examples

{action}_{singular}

Single-item operations

find_person, enrich_person, enrich_company

{action}_{plural}

List/search operations

search_people, search_companies

get_{noun}

Simple retrieval

get_quotas

People Tools

  • find_person - Find a person's LinkedIn profile by name

    • Input: full_name (required), company_name (optional)

    • Returns: LinkedIn profile URL, UID, and profile ID

  • search_people - Find prospects using Sales Navigator with advanced filtering

    • Input: query (Sales Navigator query param), page, page_size

    • Returns: List of matching profiles with pagination

  • enrich_person - Extract detailed profile information from LinkedIn URLs

    • Input: li_profile_url (required), full_enrich (optional boolean)

    • Returns: Comprehensive profile data including experience, skills, and contact info

Company Tools

  • find_company - Find a company's LinkedIn page by name

    • Input: company_name (required)

    • Returns: LinkedIn company URL, UID, and company ID

  • search_companies - Discover target companies based on various criteria

    • Input: query (Sales Navigator query param), page, page_size

    • Returns: List of matching companies with pagination

  • enrich_company - Get comprehensive company data from LinkedIn company pages

    • Input: li_company_url (required)

    • Returns: Company details, employee count, industry, locations, and more

  • search_company_employees - Identify key contacts within specific organizations

    • Input: company_uid (required), page, page_size

    • Returns: List of employees with their profile information

Utility Tools

  • get_quotas - Get current workspace quota and billing information

    • Input: None

    • Returns: Credits remaining, credits used, plan name, billing cycle dates

Pagination

Search endpoints return pagination headers for navigating through results:

Header

Description

X-Pagination-Previous

Full URL to fetch the previous page

X-Pagination-Next

Full URL to fetch the next page

Use the page parameter to manually paginate through results.

Using with AI Assistants

ChatGPT Integration

  1. Deploy to Vercel:

npm i -g vercel
vercel login
vercel
  1. Configure in ChatGPT:

    • Use the deployed URL: https://your-project.vercel.app

    • The API will be available for ChatGPT Actions

Custom GPT Authentication Workaround

Important: Custom GPTs have limitations with authorization headers. To work around this, the API supports authentication via query parameters:

POST /tools/enrich_person?session_token=your_session_token

Note: Query parameter authentication is provided as a workaround for Custom GPTs. For production applications, prefer header-based authentication for better security.

MCP Protocol Support

The API is fully compatible with the Model Context Protocol (MCP), providing:

  • Standardized tool introspection

  • Consistent error handling

  • Session-based authentication

  • Structured request/response formats

Project Architecture

src/
├── api/                    # API layer
│   ├── handlers/          # Request handlers
│   │   ├── auth.ts        # Authentication endpoint
│   │   ├── health.ts      # Health check
│   │   ├── introspect.ts  # Tool introspection
│   │   └── tools.ts       # Tool execution
│   ├── routes.ts          # Route registration
│   └── schemas/           # Request/response schemas
├── lib/                   # Core business logic
│   ├── alias.ts           # Tool alias mappings
│   ├── auth.ts            # Authentication logic
│   ├── config.ts          # Configuration management
│   ├── error.ts           # Error handling utilities
│   ├── redis.ts           # Redis service
│   ├── schemas/           # Tool parameter schemas
│   ├── translate.ts       # API translation layer
│   └── responseSchemas.ts # Response schemas
├── middleware/            # Request middleware
│   ├── logging.ts         # Request logging
│   └── security.ts        # Security middleware
├── server/                # Server configuration
│   ├── build.ts           # Server builder
│   └── start.ts           # Development server
└── scripts/               # Build scripts
    ├── generate-openapi.ts
    └── generate-openapi-gpt.ts

Testing

The project includes comprehensive testing:

# Run all tests
npm test

# Run specific test suites
npm run test:health
npm run test:auth
npm run test:tools
npm run test:integration

# Run tests with coverage
npm run test:coverage

Test Structure

  • Unit Tests: Individual function and module testing

  • Integration Tests: Full API workflow testing

  • Authentication Tests: Session token and API key validation

  • Error Handling Tests: Comprehensive error scenario coverage

Error Handling

The API provides structured error responses with:

  • Unique request IDs for tracking

  • Standardized error codes for programmatic handling

  • Detailed error messages with context

  • HTTP status codes following REST conventions

  • Sentry integration for error tracking in production

Performance & Scalability

  • Fastify framework for high-performance request handling

  • Redis integration for scalable session management

  • Rate limiting to prevent abuse

  • Request timeouts and retry logic

  • Connection pooling for external API calls

  • Graceful degradation with in-memory fallbacks

Security Features

  • Input validation with JSON schemas

  • Rate limiting to prevent abuse

  • Security headers (CORS, XSS protection, etc.)

  • Authentication validation for all protected endpoints

  • Request logging with sensitive data redaction

  • Error message sanitization to prevent information leakage

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests for new functionality

  5. Ensure all tests pass

  6. Submit a pull request

License

MIT License - see LICENSE file for details.

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/captaindatatech/captaindata-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server