reddit-radar-mcp
{"type": "text"}# reddit-radar-mcp
Encuentra hilos de Reddit donde tu producto encaja de verdad, reconstruye la conversación y filtra cada borrador de respuesta contra un límite de afirmaciones que tú defines.
Solo lectura por diseño. No hay ninguna ruta de código que publique, vote o actúe como una cuenta, y una prueba afirma que nunca la habrá. Los borradores son para que un humano los revise, edite y publique.
npx reddit-radar-mcp # run as an MCP server
npm install reddit-radar-mcp # or use the scoring/gate functions directlyRequiere Node 20.10+. Sin paso de compilación, sin dependencias nativas.
Por qué existe
La herramienta habitual de "escucha social" encuentra menciones. Esa es la parte fácil. La parte difícil es todo lo demás: ¿es este hilo realmente relevante?, ¿qué está pidiendo realmente la persona?, y ¿es verdadera la respuesta que estás a punto de publicar?
Este paquete se basa en tres afirmaciones que surgieron de usarlo en producción:
La coincidencia de palabras clave produce mayormente basura. Una heurística de recencia + forma de pregunta + "cualquier recomendación" puntúa 50/100 en literalmente cualquier publicación reciente de Reddit. La solución es la regla de anclaje (abajo), y es lo más importante aquí.
Dónde vive un hilo cambia lo que deberías decir. La misma pregunta en un subreddit de compradores y en un subreddit de ingeniería merecen comentarios diferentes, así que los niveles de subreddit establecen comportamiento, no solo clasificación.
Un modelo que escribe texto promocional es el peor juez posible de si ha exagerado. Así que la puerta de afirmaciones es determinista, basada en reglas y se ejecuta en el servidor. Se niega a devolver un borrador bloqueado.
Inicio rápido
Escribe una configuración:
Nómbrala .mjs a menos que tu proyecto ya establezca "type": "module" — de lo contrario Node la analiza
como CommonJS y la importación falla.
// radar.config.mjs
import { defineConfig, packs, composePacks } from 'reddit-radar-mcp';
export default defineConfig({
product: {
name: 'Acme',
what: 'CI/CD pipeline observability.',
claims: ['flaky test detection', 'build timing breakdowns'],
},
queries: ['flaky tests', 'CI pipeline slow', 'build times'],
// REQUIRED. Without it, every recent question looks like an opportunity.
domainTerms: ['ci', 'pipeline', 'flaky', 'github actions', 'test suite'],
// Words that mean something else outside your niche.
ambiguousTerms: ['build', 'runner'],
tiers: {
tier1: { mode: 'PROMOTE', weight: 20, subreddits: ['devops'] },
tier2: { mode: 'PROMOTE_SOFT', weight: 15, subreddits: ['sre', 'kubernetes'] },
tier3: { mode: 'CONTRIBUTE', weight: 8, subreddits: ['ExperiencedDevs'] },
tier4: { mode: 'TECHNICAL_ONLY', weight: 3, subreddits: ['programming'] },
},
gate: {
...composePacks(packs.noPricing, packs.noFabricatedMetrics, packs.noCustomerNames),
productPattern: /\bAcme\b/i,
unsupported: [
{ term: /\bJenkins\b/i, why: 'No Jenkins integration exists.' },
],
},
});Regístrala como servidor MCP:
claude mcp add radar --scope user \
-e RADAR_CONFIG=/abs/path/radar.config.mjs \
-- npx reddit-radar-mcpLuego simplemente habla con tu agente: "haz un barrido y muéstrame lo que vale la pena responder".
La regla de anclaje
La idea más útil de este paquete.
Una publicación está anclada solo si algo la vincula a tu dominio: vocabulario real del dominio, una coincidencia inequívoca de consulta o un subreddit configurado. Las señales que describen la forma de una publicación — que es reciente, que es una pregunta, que dice "recomendaciones" — nunca pueden sostener una publicación por sí solas.
Sin esta puerta, esas señales de forma suman 40+ y pasan cualquier cosa. Con ella, una publicación en r/podcasts preguntando por un "episodio POD" deja de superar a una pregunta genuina de compra.
Dos comportamientos relacionados surgen de la misma idea:
Términos ambiguos ("build", "POD", "detention") solo cuentan cuando hay una segunda señal de dominio presente — o cuando la publicación está en uno de tus subreddits, ya que el subreddit es en sí contexto de dominio.
El desahogo se penaliza con dureza (-35). Los rantings superan a las preguntas de compra, así que sin esto la clasificación se invierte y obtienes "oportunidades" que son personas quejándose de sus compañeros de trabajo.
Modos de participación
Los niveles asignan un modo a cada resultado, y la salida del barrido lo repite junto a cada hilo:
Modo | Significado |
| Nombra el producto, describe la capacidad que encaja, declara la afiliación. |
| Responde primero. Menciona el producto solo si están pidiendo herramientas. |
| Comparte conocimiento. Producto solo como contexto de quién eres. |
| No hagas pitch. Nadie ahí está comprando; el contenido promocional se elimina. |
La puerta de borradores
check_draft ejecuta dos comprobaciones independientes y se niega a devolver un borrador bloqueado.
Puerta de afirmaciones (factCheck) — reglas deterministas sobre tu límite de afirmaciones. Los paquetes
iniciales cubren los cuatro modos de fallo comunes:
Paquete | Bloquea |
| Cifras en dólares, tarifas por unidad, comparaciones de niveles de precio |
| Porcentajes inventados, afirmaciones de tiempo de actividad/SLA, escala no verificable |
| Referencias a clientes (incluso anónimas), casos de estudio con resultados medidos |
| "apalancar", "sin fisuras", "robusto", "cambiando el juego" (WARN) |
| Nombrar tu producto sin declarar afiliación |
Dos comportamientos que vale la pena conocer:
Las negaciones siempre están permitidas. "No soportamos Jenkins" pasa. Una versión anterior lo bloqueaba, lo que empujaba los borradores hacia el silencio sobre las carencias — lo contrario de la intención. Conceder una limitación real es la credibilidad más barata que existe.
Las comprobaciones de capacidad están limitadas a la afirmación. "Jenkins es una opción sólida si necesitas autoalojamiento" no activa la puerta, porque no es una afirmación sobre tu producto.
Puerta de calidad (styleCheck) — detecta texto que suena a relleno generado sin editar:
guiones largos, punto y coma, comillas curvas, enmarcado de negación ("no solo X, es Y"), vocabulario
de marketing, ritmo de oración plano y sustancia escasa.
Esto no es evasión de detección de IA. No puede serlo y no intenta serlo. Muchos subreddits prohíben el contenido de bajo esfuerzo, y los moderadores leen comentarios en lugar de ejecutar clasificadores. Así que la puerta aplica lo que esa regla realmente pide: sustancia real, sin relleno. El humano sigue editando y publicando, y la divulgación siempre está presente.
Pasa tu vocabulario de dominio para que la comprobación de sustancia sepa cómo se ve un sustantivo específico:
styleCheck(draft, { anchorTerms: [...config.domainTerms, ...config.featureTerms] });Herramientas MCP
Herramienta | Hace | Costo LLM |
| Devuelve URLs de búsqueda + el extractor de páginas para ejecutar en cada una | ninguno |
| Deduplica, puntúa, clasifica los resultados del barrido en una lista de oportunidades | ninguno |
| Puntuación 0–100 para una publicación con razonamiento por punto | ninguno |
| Reconstruye un hilo + devuelve restricciones de afirmaciones vinculantes | ninguno |
| Igual, desde extracción del navegador del cliente | ninguno |
| El punto de aplicación. APROBADO o BLOQUEADO | ninguno |
| Qué se puede y qué no se puede afirmar | ninguno |
Cada herramienta es determinista. El modelo proporciona la escritura; el servidor proporciona los hechos y el veto.
Acceso a Reddit
Tres adaptadores intercambiables detrás de una interfaz:
BrowserRedditClient— lee las mismas páginas públicas que lee una persona, desde tu propia herramienta de navegador. Sin credenciales. Este es el camino predeterminado hoy.RedditApiClient— OAuth contra la API de datos oficial. El acceso está sujeto a aprobación; consulta docs/REDDIT-ACCESS.md.FixtureRedditClient— fixtures JSON locales para pruebas y desarrollo.
Los fixtures pasan por los mismos normalizadores que las respuestas en vivo, así que los analizadores se ejercitan de verdad en lugar de encontrarse con datos reales por primera vez en producción.
Una advertencia que vale la pena decir claramente: el modo navegador depende del DOM de Reddit, y Reddit publica rediseños. Los extractores están escritos para fallar ruidosamente en lugar de devolver silenciosamente hilos vacíos que parezcan "no se encontró discusión".
Uso programático
import { scoreRelevance, factCheck, styleCheck, packs, composePacks } from 'reddit-radar-mcp';
import config from './radar.config.js';
const result = scoreRelevance(post, config, { matchedQueries: ['flaky tests'] });
if (result.passed) console.log(result.score, result.reasons);
const gate = factCheck(draft, config.gate);
if (!gate.allowed) console.log(gate.findings);Ética y política
Esta herramienta existe para ayudarte a encontrar conversaciones a las que puedes contribuir genuinamente. No te ayudará a hacer astroturfing.
Sin automatización de publicaciones. No implementado, y aplicado por prueba.
Declara la afiliación.
requireDisclosureestá activado por defecto. Los comentarios de vendedores no declarados se eliminan y pueden llevar a un baneo permanente, lo que termina con el canal por completo.Una cuenta. La Política de Constructor Responsable de Reddit prohíbe registrar múltiples cuentas para el mismo caso de uso. No uses esto para ejecutar una red de cuentas títere.
Los hilos se puntúan, nunca las personas. Nada aquí perfila a un autor, en línea con la prohibición de Reddit de inferir características de los usuarios.
Respeta las reglas del subreddit.
TECHNICAL_ONLYexiste porque hacer pitch en el lugar equivocado es a la vez grosero y contraproducente.
Variables de entorno
Variable | Predeterminado | Propósito |
| — | Requerida. Ruta absoluta a tu configuración ( |
|
|
|
| — | Solo modo |
| — | Solo modo |
| — | Solo modo |
|
| Límite de velocidad para el modo |
|
|
|
|
|
|
Lista anotada completa en .env.example.
Los registros van a stderr solamente. En el transporte stdio, stdout lleva el protocolo JSON-RPC, así que cualquier cosa escrita ahí corrompe el flujo. Las credenciales en URLs y claves sensibles se redactan antes de registrar.
Solución de problemas
Todo puntúa como oportunidad. Tus domainTerms son demasiado genéricos o faltan.
Esa lista es lo que ancla una publicación a tu dominio, y sin ella las señales de forma llevan
las publicaciones por sí solas. La validación de configuración trata una lista vacía como un error por esta razón.
Nada puntúa en absoluto. Comprueba que domainTerms use palabras que realmente aparecen en los títulos
de las publicaciones. Los términos de 5+ caracteres coinciden con inflexiones simples (pipeline → pipelines); los más
cortos coinciden exactamente, así que app no coincidirá con apps.
Un buen borrador se bloquea como sustancia escasa. Pasa tu vocabulario como anchorTerms — el
servidor MCP lo hace desde tu configuración automáticamente, pero una llamada directa a styleCheck() lo necesita
explícitamente.
Una limitación honesta se bloquea. No debería ser así; las negaciones están explícitamente permitidas. Por favor repórtalo.
Reddit muestra "Prove your humanity". Una búsqueda en frío puede encontrarse con un desafío de JavaScript. Cargar cualquier página de subreddit primero suele despejarlo para la sesión.
"Cannot use import statement outside a module". Tu configuración es un archivo .js en un
proyecto sin "type": "module", así que Node lo analiza como CommonJS. O nómbralo
radar.config.mjs o añade "type": "module" al package.json más cercano. Una configuración .json
evita la pregunta por completo, a costa de literales de regex y composePacks.
Más en SUPPORT.md.
Pruebas
npm test # 33 unit tests
npm run smoke # 14 checks over the real MCP wire protocol
npm run verify # everything, including the metadata consistency guardEl conjunto de seguridad afirma que ningún cliente expone un método de escritura, ningún archivo fuente referencia un endpoint de escritura de Reddit, y el paquete no exporta ninguna función de publicación.
Contribuir
Issues y PRs bienvenidos — consulta CONTRIBUTING.md. Ten en cuenta las exclusiones permanentes listadas allí: automatización de publicaciones, soporte multi-cuenta y evasión de detección de IA son no-objetivos deliberados en lugar de características faltantes.
Apoya este proyecto
Si esto te ahorra tiempo, patrocinar en GitHub ayuda a mantenerlo. Totalmente opcional: el paquete es MIT y siempre lo será.
Las contribuciones no económicas son igual de útiles: un informe de error con una configuración que lo reproduzca, un paquete de reglas que generalice o una nota sobre un caso de puntuación que te haya sorprendido.
Licencia
MIT — consulta LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Agentic Reddit/HN buying-signal detection for Claude Code, Cursor, and Windsurf via MCP.
A personal RAG database you build from chat, so AI creates work that sounds like you.
Reddit & X data for AI agents over MCP. Semantic search, hosted, no Reddit API.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/sourav2024/reddit-radar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server