← All blueprints
πŸ“°

Research Digest LangGraph

blueprint Β· 3 agents Β· 2 MCP servers
690β˜… stars
88forks
4.5rating

What it does

A pipeline that turns a topic into a short cited brief. A sweeper gathers sources, a deduper removes overlapping coverage, and a synthesizer writes the brief and saves it to a file. Runs well on a schedule.

The cast Β· 3 agents

Deduperdeduperreasoning

Remove overlapping and duplicate coverage, keeping the strongest source for each point.

no tools Β· reasoning only
Sweepersweeperfast

Gather sources on the topic from a broad web search.

search.web
Synthesizersynthesizerreasoning

Write a short brief with citations and save it to a report file.

fs.write_file

Flow

β†’ Sweeper β†’ sources
β†’ Deduper β†’ unique
β†’ Synthesizer β†’ brief

Interface

Inputs
topicstring
The research topic.
Outputs
briefstring
The cited brief.

Depends on Β· 2 MCP servers

πŸ”Œio.github.brave/brave-search-mcpnot in the registry yetsearch
πŸ”Œio.github.modelcontextprotocol/filesystemnot in the registry yetfs
– Export runnable code
# Generated by @socketcat/compiler for target: langgraph
# blueprint: com.socketcat/research-digest v1.0.0   schema: socketcat.dev/blueprint/v0
# This code is yours. Edit it freely. The socketcat_runtime helper is optional and can be vendored.

from typing import TypedDict
from langgraph.graph import StateGraph, START, END
import socketcat_runtime as _rt

class State(TypedDict, total=False):
    topic: object
    brief: object
    sources: object
    unique: object

def node_AgentInvoke_0(state):
    return _rt.run_agent("sweeper", state, {"topic":"topic"}, "sources")

def node_AgentInvoke_1(state):
    return _rt.run_agent("deduper", state, {"sources":"sources"}, "unique")

def node_AgentInvoke_2(state):
    return _rt.run_agent("synthesizer", state, {"unique":"unique"}, "brief")

def build():
    b = StateGraph(State)
    b.add_node("AgentInvoke_0", node_AgentInvoke_0)
    b.add_node("AgentInvoke_1", node_AgentInvoke_1)
    b.add_node("AgentInvoke_2", node_AgentInvoke_2)
    b.add_edge(START, "AgentInvoke_0")
    b.add_edge("AgentInvoke_0", "AgentInvoke_1")
    b.add_edge("AgentInvoke_1", "AgentInvoke_2")
    b.add_edge("AgentInvoke_2", END)
    return b.compile()

INPUTS = ["topic"]
OUTPUTS = ["brief"]

if __name__ == "__main__":
    _rt.main(build, INPUTS, OUTPUTS)
β–Έblueprint.json (the portable format)
{
  "id": "com.socketcat/research-digest",
  "flow": {
    "type": "sequence",
    "blocks": [
      {
        "in": {
          "topic": "topic"
        },
        "out": "sources",
        "use": "sweeper",
        "type": "agent"
      },
      {
        "in": {
          "sources": "sources"
        },
        "out": "unique",
        "use": "deduper",
        "type": "agent"
      },
      {
        "in": {
          "unique": "unique"
        },
        "out": "brief",
        "use": "synthesizer",
        "type": "agent"
      }
    ]
  },
  "tags": [
    "research",
    "synthesis",
    "scheduled"
  ],
  "title": "Research Digest",
  "agents": {
    "deduper": {
      "model": {
        "hint": "reasoning"
      },
      "title": "Deduper",
      "instructions": "Remove overlapping and duplicate coverage, keeping the strongest source for each point."
    },
    "sweeper": {
      "model": {
        "hint": "fast"
      },
      "title": "Sweeper",
      "tools": [
        "search.web"
      ],
      "instructions": "Gather sources on the topic from a broad web search."
    },
    "synthesizer": {
      "model": {
        "hint": "reasoning"
      },
      "title": "Synthesizer",
      "tools": [
        "fs.write_file"
      ],
      "instructions": "Write a short brief with citations and save it to a report file."
    }
  },
  "estate": {
    "brief": {
      "type": "string",
      "description": "The cited brief the synthesizer wrote."
    },
    "unique": {
      "type": "object",
      "description": "The sources left after the deduper removed overlap."
    },
    "sources": {
      "type": "object",
      "description": "The raw sources the sweeper gathered."
    }
  },
  "$schema": "socketcat.dev/blueprint/v0",
  "authors": [
    {
      "url": "https://socketcat.com",
      "name": "SocketCat"
    }
  ],
  "license": "MIT",
  "servers": [
    {
      "ref": "io.github.brave/brave-search-mcp",
      "alias": "search"
    },
    {
      "ref": "io.github.modelcontextprotocol/filesystem",
      "alias": "fs"
    }
  ],
  "summary": "Sweeps multiple sources, removes overlap, and writes a cited brief to a file.",
  "targets": [
    "langgraph",
    "crewai",
    "*"
  ],
  "version": "1.0.0",
  "interface": {
    "inputs": {
      "topic": {
        "type": "string",
        "description": "The research topic."
      }
    },
    "outputs": {
      "brief": {
        "type": "string",
        "description": "The cited brief."
      }
    }
  },
  "description": "A pipeline that turns a topic into a short cited brief. A sweeper gathers sources, a deduper removes overlapping coverage, and a synthesizer writes the brief and saves it to a file. Runs well on a schedule."
}