LLMKit
Servidor MCP de rastreamento de custos de IA com 11 ferramentas para análise de gastos, controle de orçamento e custos de sessão no Claude Code, Cursor e Cline.
Documentação
Meça o custo dos seus agentes de IA. Interrompa requisições antes que excedam o orçamento.
Site | Documentação | API de Preços | Arquitetura | Segurança | Caso de Garantia
LLMKit é um gateway de IA de código aberto e um conjunto de SDKs para atribuição de custos, admissão de orçamento e evidência de requisições. O gateway reserva o gasto estimado antes do envio ao provedor. Ele rejeita requisições que não cabem no orçamento ativo e, em seguida, liquida as reservas admitidas para o uso real quando a resposta é concluída.
O repositório também inclui superfícies de rastreamento local que não exigem conta LLMKit ou proxy.
Escolha uma superfície
| Superfície | Use quando | Pacote |
|---|---|---|
| Transporte Python | Você quer estimativas de custo locais em torno de chamadas de SDK existentes | llmkit-sdk |
| Wrapper de CLI | Seu cliente OpenAI ou Anthropic respeita a variável de ambiente padrão de URL base | @f3d1/llmkit-cli |
| SDK TypeScript | Você tem uma chave existente e quer sessões, streaming e acesso ao gateway a partir do TypeScript | @f3d1/llmkit-sdk |
| Servidor MCP | Você quer ferramentas de gasto, orçamento e sessão de codificação local dentro de um cliente MCP | @f3d1/llmkit-mcp-server |
| Provedor de SDK de IA | Você usa o Vercel AI SDK 6 | @f3d1/llmkit-ai-sdk-provider |
| Gateway e painel | Você precisa de orçamentos compartilhados, roteamento de provedores, recibos e análises | packages/proxy, packages/dashboard |
Início rápido
Rastreamento local em Python
pip install llmkit-sdk
from llmkit import tracked
from openai import OpenAI
costs = []
client = OpenAI(http_client=tracked(on_cost=costs.append))
client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Summarize this incident."}],
)
print(f"${sum(item.total_cost or 0 for item in costs):.6f}")
O transporte lê os metadados de uso do provedor e estima o custo a partir do catálogo de preços incluído. Ele não envia dados de rastreamento para o LLMKit.
Rastreamento via CLI sem código
npx @f3d1/llmkit-cli -- python my_agent.py
Use -v para saída por requisição ou --json para resultados legíveis por máquina.
Modo gateway (chave existente)
Os exemplos de gateway exigem uma chave de API LLMKit existente. A criação de contas e o gerenciamento de chaves estão temporariamente indisponíveis enquanto o serviço autenticado é restaurado. Se você ainda não tem uma chave, use um dos caminhos de rastreamento local acima.
from openai import OpenAI
client = OpenAI(
base_url="https://api.llmkit.sh/v1",
api_key="llmk_your_key_here",
)
response = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Draft a release note."}],
)
O caminho do orçamento
O caminho de controle é construído em torno de três limites:
- Admissão atômica: um Durable Object é dono do estado de reserva para cada escopo de orçamento. Requisições concorrentes não podem gastar o mesmo saldo restante.
- Idempotência ciente do envio: falhas determinísticas antes do envio liberam a chave. Depois que o envio ao provedor pode ter ocorrido, as falhas permanecem terminais para evitar gastos duplicados.
- Respostas limitadas: corpos não transmitidos em streaming e frames SSE individuais têm limites explícitos de bytes. LLMKit cancela leituras upstream quando um limite é excedido.
Os recibos de requisição vinculam a decisão de admissão, a tentativa do provedor, a liquidação e a transferência de análises com identificadores estáveis. As gravações no banco de dados usam um outbox, para que uma interrupção de análises não apague silenciosamente as evidências de orçamento.
Servidor MCP
{
"mcpServers": {
"llmkit": {
"command": "npx",
"args": ["-y", "@f3d1/llmkit-mcp-server"]
}
}
}
Cinco ferramentas locais inspecionam sessões suportadas do Claude Code e dados de tarefas do Cline sem uma chave LLMKit. Seis ferramentas de gateway consultam gastos, orçamentos, chaves, sessões e saúde do serviço quando LLMKIT_API_KEY contém uma chave existente. Juntas, elas expõem 11 ferramentas.
Dados de preços
O catálogo fixado é um instantâneo de referência incluído, não uma cotação ao vivo. Um arquivo de origem, packages/shared/pricing.json, registra a data do instantâneo e gera as tabelas TypeScript, Python e MCP. A CI rejeita divergências entre os arquivos de origem e os gerados. O site público renderiza apenas tabelas de provedores preenchidas e exibe a data da origem.
O endpoint público de comparação não exige conta:
https://api.llmkit.sh/v1/pricing/compare?mode=text-token&models=anthropic%2Fclaude-sonnet-4-6%2Copenai%2Fgpt-4o&input=1000&output=1000&cacheRead=0&cacheWrite=0
O endpoint precifica apenas as chaves exatas de modelo fornecidas pelo chamador. Ele não procura nem recomenda o modelo mais barato. O preço é uma estimativa, não uma fatura do provedor. As regras de cobrança do provedor, a modalidade do modelo e a atualização do catálogo permanecem parte do limite de erro.
Evidências e limite atual
| Afirmação | Evidência neste repositório | Limite |
|---|---|---|
| A admissão concorrente de orçamento é serializada | Fixtures do Worker exercitam reservas concorrentes, novas tentativas, liquidação e recuperação | Prova determinística local de Worker e banco de dados |
| O comportamento de nova tentativa evita envio duplicado | Testes de idempotência cobrem incompatibilidade de payload, liberação pré-envio e estado indeterminado pós-envio | O comportamento do provedor é simulado na CI |
| Respostas grandes do provedor são limitadas | Fixtures de SSE de sucesso, erro e não terminadas verificam rejeição e cancelamento de stream | O limite é por resposta em buffer ou frame SSE |
| Os artefatos de preços são reproduzíveis | Um gerador e o caminho de --check da CI cobrem todas as tabelas de idiomas publicadas | Os valores do catálogo ainda exigem atualizações de origem |
| A recuperação hospedada pode ser avaliada com segurança | Implantação de staging protegida e executores de prova vinculam um Worker isolado, banco de dados, revisão e registro de limpeza | Um recibo concluído de concorrência hospedada e recuperação de interrupção não é reivindicado aqui |
Consulte STAGING_PROOF.md para o contrato de prova hospedada isolado. Ele recusa deliberadamente alvos de produção e worktrees sujos.
Política e design do projeto
| Documento | O que ele abrange |
|---|---|
| Governança | Autoridade de decisão, papéis, disputas e a lacuna de continuidade atual |
| Roteiro | Trabalho pretendido e excluído até agosto de 2027 |
| Arquitetura | Componentes, fluxos de requisição, identidade, armazenamento, implantação e limites de falha |
| Segurança | Requisitos de segurança, garantias excluídas, relatórios e versões suportadas |
| Garantia de segurança | Modelo de ameaças, limites de confiança, evidências executáveis, riscos residuais e HOLDs em tempo de execução |
| Acessibilidade | Controles do site público, método de verificação, lacunas conhecidas e escopo de idioma |
| Contribuição | Configuração, portões de qualidade, expectativas de revisão e assinatura DCO |
Desenvolvimento
git clone https://github.com/smigolsmigol/llmkit
cd llmkit
corepack pnpm@9.15.4 install --frozen-lockfile
corepack pnpm@9.15.4 build
corepack pnpm@9.15.4 quality:pr
Execute o Worker localmente com bindings somente de desenvolvimento:
corepack pnpm@9.15.4 --filter @f3d1/llmkit-proxy dev
Comandos genéricos de implantação são omitidos intencionalmente. Staging e produção usam scripts protegidos separados com confirmação explícita de alvo.
Segurança
As credenciais do provedor são criptografadas com AES-256-GCM usando um IV aleatório e dados autenticados adicionais vinculados ao proprietário/provedor. As chaves de API LLMKit são hash antes do armazenamento. A CI inclui varredura de segredos, análise estática, revisão de dependências, CodeQL e verificações de proveniência de pacotes.
Leia a política de segurança e arquitetura e o instantâneo de Security Insights legível por máquina. Por favor, relate vulnerabilidades por meio do relatório privado de vulnerabilidades do GitHub ou envie um e-mail para security@llmkit.sh.