Communitygithub.com

Dr. Manhattan

API unificada para mercados de previsão (Polymarket, Kalshi, Opinion, Limitless, Predict.fun) que permite navegar, pesquisar e negociar, gerenciar ordens, executar estratégias de market-making e comparar preços entre exchanges usando uma interface única estilo CCXT.

O que é Dr. Manhattan?

Dr. Manhattan é uma biblioteca Python e servidor MCP que unifica o acesso a múltiplos mercados de previsão (Polymarket, Kalshi, Opinion, Limitless e Predict.fun) por meio de uma única API padronizada, similar ao que CCXT faz para exchanges de criptomoedas. Ele oferece ferramentas para descoberta de mercados (busca por palavras-chave, slug ou URL), consulta de order books, criação e cancelamento de ordens, verificação de saldos e posições, cálculo de valor patrimonial líquido (NAV) e execução de estratégias automatizadas de market-making em segundo plano. Suporta tanto uso como biblioteca Python (com ou sem autenticação) quanto como servidor MCP para integração com assistentes de IA como Claude Code. As funcionalidades incluem busca de mercados, order book (melhor bid/ask), ordens com tipos GTC/FOK/IOC, gerenciamento de posições com PnL, e sessões de estratégia com pausa/retomada. Preços são tratados como probabilidades (0 a 1) e os mercados normalmente têm dois resultados (Sim/Não).

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add guzus/dr-manhattan

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Dr. Manhattan - Negociação em Mercados de Previsão

Dr. Manhattan é uma API unificada para mercados de previsão, similar a como CCXT funciona para exchanges de criptomoedas. Ele suporta Polymarket, Kalshi, Opinion, Limitless e Predict.fun por meio de uma única interface.

Configuração

Instale as dependências com uv:

uv venv && uv pip install -e .

Para o servidor MCP (integração com Claude):

uv sync --extra mcp

Exchanges Suportados

ExchangeChain/TipoAutenticação
PolymarketPolygonChave privada + endereço do financiador
KalshiCEX regulamentadoChave API + chave privada RSA
OpinionBNB ChainChave API + chave privada + endereço multi-sig
LimitlessBaseChave privada
Predict.funBNB ChainChave API + chave privada (EOA ou carteira inteligente)

Uso como Biblioteca Python

Somente Leitura (Sem Credenciais)

import dr_manhattan

polymarket = dr_manhattan.Polymarket({'timeout': 30})
markets = polymarket.fetch_markets()
for market in markets:
    print(f"{market.question}: {market.prices}")

Com Autenticação

import dr_manhattan

polymarket = dr_manhattan.Polymarket({
    'private_key': '0x...',
    'funder': '0x...',
})

order = polymarket.create_order(
    market_id="market_123",
    outcome="Yes",
    side=dr_manhattan.OrderSide.BUY,
    price=0.65,
    size=100,
    params={'token_id': 'token_id'}
)

Fábrica de Exchanges

from dr_manhattan import create_exchange, list_exchanges

print(list_exchanges())  # ['polymarket', 'opinion', 'limitless', 'predictfun', 'kalshi']
exchange = create_exchange('polymarket', {'timeout': 30})

Uso via Servidor MCP

Dr. Manhattan expõe todas as capacidades de negociação como ferramentas MCP. Configure no Claude Code (~/.claude/settings.json ou .mcp.json):

{
  "mcpServers": {
    "dr-manhattan": {
      "command": "/caminho/para/dr-manhattan/.venv/bin/python",
      "args": ["-m", "dr_manhattan.mcp.server"],
      "cwd": "/caminho/para/dr-manhattan"
    }
  }
}

Referência de Ferramentas MCP

Ferramentas de Exchange:

  • list_exchanges - Lista todos os mercados de previsão disponíveis.
  • get_exchange_info(exchange) - Obtém metadados e capacidades de uma exchange.
  • validate_credentials(exchange) - Verifica se as credenciais são válidas sem negociar.

Descoberta de Mercados:

  • search_markets(exchange, query) - Busca mercados por palavra-chave. Esta é a maneira mais rápida de encontrar mercados sobre um tópico.
  • fetch_markets(exchange, limit?, offset?) - Obtém todos os mercados com paginação.
  • fetch_market(exchange, market_id) - Obtém um mercado específico pelo ID.
  • fetch_markets_by_slug(exchange, slug) - Obtém mercados por slug ou URL (Polymarket, Limitless).
  • find_tradeable_market(exchange, binary?, limit?, min_liquidity?) - Encontra um mercado adequado para negociação.
  • find_crypto_hourly_market(exchange, token_symbol?) - Encontra mercados de preço horário de criptomoedas (Polymarket).
  • fetch_token_ids(exchange, market_id) - Obtém IDs de token para um mercado.
  • parse_market_identifier(identifier) - Extrai slug de uma URL do Polymarket.
  • get_tag_by_slug(slug) - Obtém informações de tag do Polymarket.

Order Book:

  • get_orderbook(exchange, token_id) - Obtém o order book completo (ofertas de compra e venda).
  • get_best_bid_ask(exchange, token_id) - Obtém os melhores preços de compra e venda.

Negociação:

  • create_order(exchange, market_id, outcome, side, price, size) - Coloca uma ordem de compra ou venda. Preço é 0-1 (probabilidade). O lado é "buy" ou "sell".
  • cancel_order(exchange, order_id, market_id?) - Cancela uma ordem específica.
  • cancel_all_orders(exchange, market_id?) - Cancela todas as ordens abertas.
  • fetch_order(exchange, order_id, market_id?) - Obtém detalhes da ordem e status de preenchimento.
  • fetch_open_orders(exchange, market_id?) - Lista todas as ordens abertas.

Conta:

  • fetch_balance(exchange) - Obtém saldo da conta (USDC).
  • fetch_positions(exchange, market_id?) - Obtém posições atuais com PnL.
  • fetch_positions_for_market(exchange, market_id) - Obtém posições para um mercado específico.
  • calculate_nav(exchange, market_id?) - Calcula o valor patrimonial líquido (saldo + posições).

Gerenciamento de Estratégias:

  • create_strategy_session(strategy_type, exchange, market_id, ...) - Inicia uma estratégia de market-making em segundo plano.
  • get_strategy_status(session_id) - Obtém status em tempo real da estratégia (NAV, posições, delta).
  • get_strategy_metrics(session_id) - Obtém métricas de desempenho (tempo de atividade, preenchimentos).
  • pause_strategy(session_id) - Pausa uma estratégia em execução.
  • resume_strategy(session_id) - Retoma uma estratégia pausada.
  • stop_strategy(session_id, cleanup?) - Para uma estratégia e opcionalmente cancela ordens.
  • list_strategy_sessions - Lista todas as sessões de estratégia ativas.

Fluxos de Trabalho Comuns

Encontrar e Analisar um Mercado

  1. Use search_markets com uma palavra-chave para encontrar mercados relevantes.
  2. Escolha um mercado nos resultados e anote seu id e metadata.clobTokenIds.
  3. Use get_orderbook com um ID de token para ver as ofertas atuais de compra e venda.
  4. Use get_best_bid_ask para uma verificação rápida do spread.

Realizar uma Negociação

  1. Encontre o mercado usando search_markets ou fetch_markets_by_slug.
  2. Verifique fetch_balance para confirmar fundos disponíveis.
  3. Obtenha o order book com get_orderbook para ver os preços atuais.
  4. Use create_order com o ID do mercado, resultado ("Yes" ou "No"), lado ("buy" ou "sell"), preço (0-1) e tamanho.
  5. Monitore com fetch_order ou fetch_open_orders.

Executar uma Estratégia de Market-Making

  1. Encontre um mercado com search_markets ou find_tradeable_market.
  2. Inicie com create_strategy_session(strategy_type="market_making", exchange, market_id).
  3. Monitore com get_strategy_status e get_strategy_metrics.
  4. Controle com pause_strategy, resume_strategy ou stop_strategy.

Verificar Portfólio

  1. fetch_balance para ver o saldo.
  2. fetch_positions para ver todas as posições abertas com PnL não realizado.
  3. calculate_nav para o valor total do portfólio (saldo + posições).

Conceitos-chave

  • Preços são probabilidades variando de 0 a 1 (exclusivo). Um preço de 0,65 significa que o mercado implica uma chance de 65%.
  • Resultados são tipicamente "Sim" e "Não" para mercados binários. Seus preços somam aproximadamente 1.
  • IDs de token são identificadores específicos de cada exchange para cada resultado de um mercado. Necessários para consultas de order book.
  • Slugs são identificadores de URL legíveis por humanos (ex.: "trump-2024") usados por Polymarket e Limitless.
  • Tipos de ordem suportados: GTC (válida até cancelar), FOK (preencher ou cancelar), IOC (imediata ou cancelar).

Executando Exemplos

uv run python examples/list_all_markets.py polymarket
uv run python examples/spread_strategy.py --exchange polymarket --slug fed-decision
uv run python examples/spike_strategy.py -e opinion -m 813 --spike-threshold 0.02

Modelos de Dados

Market campos: id, question, outcomes, prices, volume, liquidity, close_time, tick_size, description, metadata (contém slug, clobTokenIds).

Order campos: id, market_id, outcome, side (BUY/SELL), price, size, filled, status (PENDING/OPEN/FILLED/CANCELLED), time_in_force.

Position campos: market_id, outcome, size, average_price, current_price. Propriedades: cost_basis, current_value, unrealized_pnl.

Orderbook campos: bids (preço, tamanho decrescente), asks (preço, tamanho crescente). Propriedades: best_bid, best_ask, mid_price, spread.

Habilidades Relacionadas