API Documentation

Overview

PaperDog provides both REST API and Model Context Protocol (MCP) endpoints for accessing AI research papers from arXiv and HuggingFace.

Base URL
https://paperdog.org
Authentication

No API key required. Rate limited by IP address.

REST API Endpoints

Get Papers
GET

Endpoint: /api/papers

Description: Get list of papers with pagination and filtering

Query Parameters:
  • page (number) - Page number (default: 1)
  • limit (number) - Results per page (default: 20, max: 100)
  • category (string) - Filter by category
  • search (string) - Search query
curl "https://paperdog.org/api/papers?limit=10&category=machine_learning"
Search Papers
GET

Endpoint: /api/search

Description: Search papers with advanced filters

Query Parameters:
  • q (string, required) - Search query
  • category (string) - Filter by category
  • limit (number) - Max results (default: 20)
  • min_score (number) - Minimum relevance score (1-10)
curl "https://paperdog.org/api/search?q=transformer&limit=5&min_score=7"
Get Paper Details
GET

Endpoint: /api/papers/:id

Description: Get detailed information about a specific paper

curl "https://paperdog.org/api/papers/12345"
Get Categories
GET

Endpoint: /api/categories

Description: Get all available research categories

curl "https://paperdog.org/api/categories"
Archive Search
GET

Endpoint: /api/archive/search

Description: Search historical paper archives

Query Parameters:
  • query (string) - Search query
  • start_date (string) - Start date (YYYY-MM-DD)
  • end_date (string) - End date (YYYY-MM-DD)
  • category (string) - Filter by category
  • limit (number) - Max results

Model Context Protocol (MCP)

PaperDog implements the Model Context Protocol for AI agent integration.

MCP Endpoint

Endpoint: POST /mcp

Protocol: JSON-RPC 2.0

Content-Type: application/json

Available MCP Tools

paperdog_search_papers

Description: Search across arXiv and HuggingFace papers

Parameters:
{ "query": "string (required)", "category": "string (optional)", "limit": "number (optional, default: 20, max: 100)", "min_score": "number (optional, range: 1-10)" }
Example Request:
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "paperdog_search_papers", "arguments": { "query": "computer vision", "category": "computer_vision", "limit": 10 } } }
paperdog_get_daily_papers

Description: Get curated daily papers with AI analysis

Parameters:
{ "date": "string (optional, format: YYYY-MM-DD)", "category": "string (optional)" }
paperdog_get_paper_details

Description: Get detailed paper information including analysis

Parameters:
{ "paper_id": "string (required)", "date": "string (optional, format: YYYY-MM-DD)", "include_analysis": "boolean (optional, default: true)" }

Code Examples

JavaScript (REST API)
// Search for papers const response = await fetch('https://paperdog.org/api/search?q=transformer&limit=10'); const data = await response.json(); console.log('Found papers:', data.papers.length); data.papers.forEach(paper => { console.log(paper.title, paper.authors); });
Python (requests)
import requests # Search papers response = requests.get('https://paperdog.org/api/search', params={ 'q': 'machine learning', 'limit': 10, 'min_score': 7 }) data = response.json() for paper in data['papers']: print(f"Title: {paper['title']}") print(f"Authors: {', '.join(paper['authors'])}") print("---")
MCP Client Example
// MCP request to search papers const mcpRequest = { jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "paperdog_search_papers", arguments: { query: "generative AI", limit: 5, min_score: 8 } } }; const response = await fetch('https://paperdog.org/mcp', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(mcpRequest) }); const result = await response.json(); console.log('Search results:', result.result.content[0].text);

Rate Limits

PaperDog implements IP-based rate limiting to ensure fair usage:

  • REST API: 1000 requests per hour per IP
  • MCP API: 100 requests per hour per IP
  • Daily Limit: 10,000 requests per day per IP

Rate limit headers are included in responses:

X-RateLimit-Limit: 100 X-RateLimit-Remaining: 95 X-RateLimit-Reset: 1640995200