Documentación de la API de StoryLenses
StoryLenses ofrece generación de cartas de presentación impulsada por IA a través de 5 herramientas MCP componibles y endpoints REST. Crea agentes de carrera, bots de solicitud de empleo o integra cartas de presentación narrativas en tu plataforma.
URL base para todos los endpoints REST:
https://www.storylenses.app/apiAutenticación
Todas las solicitudes autenticadas utilizan autenticación Bearer token con una API key de StoryLenses. Algunos endpoints (como el análisis de ofertas) funcionan sin clave, pero con límites de tasa más estrictos.
Formato de la clave
Las API keys usan el prefijo sl_live_ seguido de 32 caracteres alfanuméricos:
sl_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxUso
Incluye tu clave en el encabezado Authorization:
Authorization: Bearer sl_live_YOUR_API_KEYLas API keys se hashean antes de almacenarse y solo se pueden ver una vez al crearlas. Si pierdes tu clave, crea una nueva desde el Portal de Desarrolladores.
Obtén tu API key desde el Portal de Desarrolladores
Inicio rápido
Comienza en menos de 2 minutos. Elige tu cliente y pega la configuración.
Claude Desktop
Añade a tu configuración MCP de Claude Desktop:
{
"mcpServers": {
"storylenses": {
"url": "https://mcp.storylenses.app/sse",
"headers": {
"Authorization": "Bearer sl_live_YOUR_API_KEY"
}
}
}
}Cursor / VS Code
Añade a la configuración MCP de Cursor o VS Code:
{
"mcp": {
"servers": {
"storylenses": {
"url": "https://mcp.storylenses.app/sse",
"headers": {
"Authorization": "Bearer sl_live_YOUR_API_KEY"
}
}
}
}
}cURL
Prueba la API directamente con cURL:
curl -X POST https://www.storylenses.app/api/analyze-job-description \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sl_live_YOUR_API_KEY" \
-d '{
"jobDescription": "Senior Frontend Engineer at Stripe...",
"locale": "en"
}'Integración MCP
StoryLenses soporta los transportes Stdio y HTTP para clientes MCP. Usa el que mejor se adapte a tu arquitectura.
Transporte Stdio (npm)
Instala y ejecuta vía npx — ideal para agentes locales y herramientas CLI:
npx -y @storylenses/mcp-serverConfigura estas variables de entorno:
STORYLENSES_API_KEY=sl_live_YOUR_API_KEY
STORYLENSES_API_URL=https://www.storylenses.appTransporte HTTP (Streamable HTTP)
Envía solicitudes JSON-RPC 2.0 directamente — ideal para agentes en la nube e integraciones del lado del servidor:
POST https://www.storylenses.app/api/mcp/endpoint
Content-Type: application/json
Authorization: Bearer sl_live_YOUR_API_KEYMétodos soportados
El endpoint MCP soporta los siguientes métodos JSON-RPC:
| Método | Descripción |
|---|---|
initialize | Inicializa la sesión MCP e intercambia capacidades |
tools/list | Lista todas las herramientas disponibles y sus esquemas |
tools/call | Ejecuta una herramienta con los argumentos proporcionados |
Referencia de herramientas
Las 5 herramientas disponibles a través del protocolo MCP. Los esquemas de parámetros se obtienen directamente de las definiciones de las herramientas.
La API de StoryLenses está en desarrollo activo. 2 de 5 herramientas están completamente activas. Las 3 restantes devuelven datos de ejemplo realistas para que puedas construir tu integración ahora — funcionarán de extremo a extremo cuando se lance la API completa.
storylenses_analyze_jobActivaExtract 15+ structured fields from a job posting — role requirements, company challenges, culture signals, recruiter priorities
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
job_url | string | — | URL of the job posting to analyze |
job_text | string | — | Raw text of the job posting (use if no URL) |
locale | string | — | Response language (en, de, es, or pt) (en, de, es, pt) [default: en] |
storylenses_match_profileVista previaMatch a candidate profile/CV against job data — identifies fit score, matching skills, career gaps, and strongest narrative angle
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
job_analysis | object | ✓ | Job analysis output from storylenses_analyze_job |
candidate_cv | string | ✓ | Candidate's CV or resume as plain text |
locale | string | — | Response language (en, de, es, or pt) (en, de, es, pt) [default: en] |
storylenses_generate_letterVista previaGenerate a story-driven cover letter using matched data and a narrative archetype. Supports en/de/es/pt.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
job_analysis | object | ✓ | Job analysis from storylenses_analyze_job |
match_data | object | ✓ | Match data from storylenses_match_profile |
candidate_name | string | ✓ | Candidate's full name for the letter greeting |
archetype | string | — | Narrative archetype ID (use storylenses_list_archetypes to see options) [default: golden-fleece] |
tone | string | — | Writing tone — professional, conversational, confident, etc. (professional, conversational, formal, confident, analytical, storytelling, humble, technical, creative) [default: professional] |
length | string | — | Letter length — short (150-200 words), medium (250-350), or full (400-500) (short, medium, full) [default: medium] |
locale | string | — | Output language (en, de, es, or pt) (en, de, es, pt) [default: en] |
storylenses_quality_checkVista previaScore and evaluate a cover letter for relevance, narrative strength, and completeness. Returns score 0-100 with actionable feedback.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
letter_text | string | ✓ | The cover letter text to evaluate (minimum 200 characters) |
job_analysis | object | ✓ | Job analysis from storylenses_analyze_job for context |
locale | string | — | Feedback language (en, de, es, or pt) (en, de, es, pt) [default: en] |
storylenses_list_archetypesActivaReturn available narrative archetypes with descriptions so the agent or user can select a style
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
locale | string | — | Description language (en, de, es, or pt) (en, de, es, pt) [default: en] |
REST API
Endpoints HTTP directos para cuando no necesitas el protocolo MCP completo. Misma lógica subyacente que las herramientas MCP.
/api/analyze-job-descriptionExtrae campos estructurados de una oferta de empleo. Acepta texto sin formato o una URL.
| Parámetro | Tipo | Descripción |
|---|---|---|
jobDescription | string | Texto sin formato de la oferta de empleo |
jobUrl | string | URL de la oferta de empleo (alternativa a jobDescription) |
locale | string | Idioma de la respuesta: en, de, es o pt (por defecto: en) |
/api/evaluate-letterPuntúa y evalúa una carta de presentación en relevancia, fuerza narrativa y completitud.
| Parámetro | Tipo | Descripción |
|---|---|---|
letterText | string | El texto de la carta de presentación a evaluar (mín. 200 caracteres) |
jobAnalysis | object | Análisis de la oferta de /api/analyze-job-description |
locale | string | Idioma del feedback: en, de, es o pt (por defecto: en) |
/api/healthEndpoint de comprobación de estado. Devuelve un objeto de estado — no requiere autenticación.
{ "status": "ok" }Errores y límites de tasa
Todos los errores siguen un formato consistente. Los límites de tasa se aplican por IP para solicitudes no autenticadas y por API key para solicitudes autenticadas.
Códigos de estado HTTP
| Código | Significado | Descripción |
|---|---|---|
200 | OK | Solicitud exitosa |
400 | Solicitud incorrecta | Parámetros inválidos o faltantes |
401 | No autorizado | API key faltante o inválida |
403 | Prohibido | Clave válida pero permisos insuficientes o límite del plan excedido |
429 | Demasiadas solicitudes | Límite de tasa excedido — reintenta después del tiempo indicado |
500 | Error del servidor | Error interno — contacta soporte si persiste |
Formato de respuesta de error
{
"error": "Human-readable error message"
}Límites de tasa
Los límites de tasa varían según el endpoint y el método de autenticación. Los usuarios con API key obtienen límites más altos según su plan.
| Endpoint | Límite |
|---|---|
/api/analyze-job-description | 10 req/min (IP) / plan-based (API key) |
/api/evaluate-letter | 10 req/min (IP) / plan-based (API key) |
/api/mcp/endpoint | 30 req/min (IP) |
Ejemplos de código
Ejemplos completos, listos para copiar y pegar, para patrones de integración comunes.
TypeScript — Flujo MCP completo
Generación de carta de presentación de extremo a extremo usando el SDK MCP:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
// Connect to StoryLenses MCP
const transport = new SSEClientTransport(
new URL("https://mcp.storylenses.app/sse"),
{ requestInit: { headers: { Authorization: "Bearer sl_live_YOUR_API_KEY" } } }
);
const client = new Client({ name: "my-agent", version: "1.0" });
await client.connect(transport);
// 1. Analyze the job posting
const jobResult = await client.callTool({
name: "storylenses_analyze_job",
arguments: { job_url: "https://linkedin.com/jobs/view/12345" }
});
const jobAnalysis = JSON.parse(jobResult.content[0].text);
// 2. Match candidate profile
const matchResult = await client.callTool({
name: "storylenses_match_profile",
arguments: {
job_analysis: jobAnalysis,
candidate_cv: "Jane Doe — 8 years frontend, React, TypeScript..."
}
});
const matchData = JSON.parse(matchResult.content[0].text);
// 3. Generate cover letter
const letterResult = await client.callTool({
name: "storylenses_generate_letter",
arguments: {
job_analysis: jobAnalysis,
match_data: matchData,
candidate_name: "Jane Doe",
archetype: matchData.suggested_archetype || "golden-fleece",
tone: "professional",
length: "medium"
}
});
const letter = JSON.parse(letterResult.content[0].text);
// 4. Quality check
const scoreResult = await client.callTool({
name: "storylenses_quality_check",
arguments: {
letter_text: letter.letter_text,
job_analysis: jobAnalysis
}
});
const score = JSON.parse(scoreResult.content[0].text);
console.log(letter.letter_text); // Story-driven cover letter
console.log(score.overall_score); // 87/100cURL — Solicitudes JSON-RPC
Inicializa, lista herramientas y ejecuta una herramienta vía el endpoint HTTP:
# Initialize MCP session
curl -X POST https://www.storylenses.app/api/mcp/endpoint \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sl_live_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "my-agent", "version": "1.0" }
}
}'
# List available tools
curl -X POST https://www.storylenses.app/api/mcp/endpoint \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sl_live_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}'
# Call a tool
curl -X POST https://www.storylenses.app/api/mcp/endpoint \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sl_live_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "storylenses_analyze_job",
"arguments": {
"job_url": "https://linkedin.com/jobs/view/12345",
"locale": "en"
}
}
}'Python — REST API
Usando httpx para llamar a los endpoints REST directamente:
import httpx
API_KEY = "sl_live_YOUR_API_KEY"
BASE = "https://www.storylenses.app/api"
# Analyze a job posting
resp = httpx.post(
f"{BASE}/analyze-job-description",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"jobDescription": "Senior Engineer at Acme...", "locale": "en"}
)
job = resp.json()
# Evaluate a cover letter
resp = httpx.post(
f"{BASE}/evaluate-letter",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"letterText": "Dear Hiring Manager, ...",
"jobAnalysis": job,
"locale": "en"
}
)
score = resp.json()
print(f"Score: {score['overall_score']}/100")Planes y facturación
Todos los planes incluyen acceso a las 5 herramientas en los 4 idiomas. Solo la generación de cartas de presentación cuenta para tu límite de uso.
| Plan | Precio | Generaciones | Excedente |
|---|---|---|---|
| Free | $0 | 10 / mes | — |
| Developer | $29/mes | 200 / mes | $0.25 |
| Scale | $99/mes | 1,000 / mes | $0.25 |
| Enterprise | Personalizado | Ilimitado | Personalizado |
¿Qué cuenta como una generación?
Solo una herramienta es facturable:
storylenses_generate_letter— cada llamada cuenta como 1 generación- Todas las demás herramientas (analizar, emparejar, verificación de calidad, listar arquetipos) son gratuitas e ilimitadas
Soporte
¿Necesitas ayuda con la integración? Aquí tienes los mejores recursos para empezar.
Portal de Desarrolladores
Crea y gestiona API keys, consulta analíticas de uso
Descripción general de MCP
Resumen de marketing, guías de inicio rápido, detalles de precios
Partners
Oportunidades de asociación e integraciones B2B
Para soporte técnico, escribe a support@storylenses.app