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