suyash.mulik
PUNE · UTC+5:30

Suyash Mulik — AI engineer · agents / RAG / MCP

Agents you can trust with real systems.

I build agent systems, retrieval assistants and the evals around them on Claude, currently at a cross-border payments fintech. Every tool sits behind a schema. Every write is auditable.

Scroll — the wire follows
LangGraph · MCP · FAISS · Neo4j
Python · TypeScript · Claude

How I build

Four patterns, the same in a side project and in production.

  1. Tools behind schemas

    The model never touches a system directly. Every capability is a typed tool with a JSON schema, so what an agent can do is bounded, mockable and auditable.

  2. Routing in code, not in prose

    Shared state and conditional edges decide what happens next. When control flow is deterministic, you can test it, and you can replay it when something looks wrong.

  3. Retrieve first, cite always

    Generation is constrained to what was retrieved and every claim carries its source. Graph gives you the entity links, vectors give you the wording. Together they beat either alone.

  4. Evals before shipping

    Every prompt or model change runs against a set of real cases first, tracked per version. It is the part most demos skip, and the part that makes the rest safe to run.

Work

Public code you can read, with the architecture drawn live.

Work · 01LangGraph · FastAPI MCP · Python

Autonomous campaign agent team

A marketing team implemented as four LangGraph agents with one job each: Research pulls live market data through web search and returns structured JSON, Strategy turns it into positioning, Content drafts for blog, LinkedIn and Twitter, and the Reviewer grades each draft PASS or FAIL.

The edge I care about is the FAIL route: the graph sends the draft back to Content with the reviewer's notes attached and iterates until it passes. The routing decision is made in code from the verdict field, not left to the model. Tools live outside the agents in a FastAPI MCP server, so a tool can be swapped or mocked without touching agent logic.

  • StateGraph
  • conditional edges
  • shared state
  • web_search · Tavily
  • write_file
View the source
Four agent nodes in a loop: Research, Strategy, Content, Reviewer, with a FAIL edge back to Content and a PASS exit to the report. STATEGRAPH · SHARED STATE FAIL → revise with notes PASS → campaign_report.md Researchweb_search Strategypositioning Contentblog · li · x Reviewer FAIL · PASS FastAPI MCP server · web_search (Tavily) · write_file

Work · 02Python MCP SDK · Flask · HubSpot

HubSpot Next Best Action

An LLM wired into a live CRM in two pieces. The first is a HubSpot MCP server on the official Python SDK over stdio, exposing eight tools: companies, contacts, deals, tickets, recent conversations and a reply-to-thread tool. Each one has a JSON schema, so the model sees a typed contract rather than an SDK.

The second is the trigger. HubSpot fires a webhook when a customer message lands, a small Flask chain persists the payload, and an MCP host reads it, works out intent, decides the next best action, drafts a reply and sends it through the reply tool. The reply tool derives recipient and channel from the thread itself, so the model only has to get a thread ID and a message right.

  • 8 typed tools
  • stdio transport
  • webhook → payload.json
  • bounded writes
View the source
Flow from a HubSpot webhook through Flask to a saved payload, into an MCP host that reasons and calls one of eight typed tools on an MCP server, which writes back to HubSpot. EVERY WRITE GOES THROUGH A TOOL HubSpotnew message WebhookFlask chain payload.json MCP host · LLMintent → next best action → draft TOOL BOUNDARY · JSON SCHEMA PER TOOL companies contacts deals tickets conversations thread messages reply_to_thread 8 tools · list_tools publishes schemas · call_tool routes by name reply sent · recipient + channel derived from the thread

Work · 03spaCy · FAISS + MiniLM · Gemini

RAG over financial news, two ways at once

A research assistant over forex news that runs two retrieval paths and compares them. Path one is a knowledge graph: spaCy named-entity recognition and a dependency parse over every article, extracting entities and subject-verb-object relations. Path two is dense retrieval: MiniLM sentence embeddings in a FAISS IVF index, inner-product search, top ten chunks per query.

Both contexts go to Gemini separately and the stronger answer wins. Around that sit an LRU cache on queries, a SHA-256 change tracker so unchanged documents are never re-embedded, a news fetcher that writes timestamped snapshots, and three MetaTrader 5 signal scanners whose output joins the same corpus.

  • NER + SVO graph
  • FAISS IVF · top-10
  • SHA-256 change tracking
  • MT5 EMA / bias / trend
View the source
A query fans out to a knowledge-graph path and a vector path, each answered by Gemini, then compared to pick the stronger answer. GRAPH + VECTOR · COMPARE query"setup on EUR/USD this week" KNOWLEDGE GRAPH USDFedECBratesEUR spaCy NER · dependency parse · S-V-O DENSE RETRIEVAL MiniLM → FAISS IVF · inner product · top 10 Gemini · A Gemini · B vs stronger answer · LRU cached · SHA-256 change tracked

Work · 04TypeScript · React · open source

Skybridge docs-QA RAG example

Skybridge is a TypeScript framework for building MCP and ChatGPT apps. The maintainers had no retrieval example, so I contributed one: RAG over their own documentation. It ingests the live docs so there is no snapshot to go stale, chunks by section with deep-link anchors, embeds server-side, retrieves the top five by cosine similarity and answers with a numbered citation on every claim.

The React view renders citations as chips that expand the exact passage and deep-link back into the docs. When the project's automated reviewer flagged that an out-of-range marker could pass through unvalidated, I pushed a fix that strips invalid citations on the server and guards the chip lookup in the view. Pull request #1027, under review.

  • live ingestion
  • section chunks + anchors
  • top-5 cosine
  • cited answers
  • PR #1027
Read the pull request
Live docs are chunked by section, embedded, and the top five passages produce an answer with citation chips one to five; an invalid citation six is stripped. EVERY CLAIM CARRIES A SOURCE live docsno snapshot chunk by section#deep-link anchors embedserver-side top 5 by cosine similaritypassages ship view-only in metadata answer 1 23 5 6 ← stripped: n > sources.length 4 chip expands the passage · deep-links into the docs

Now

Production agents on Claude, in cross-border payments.

I work at a fintech company in cross-border payments and own three things on the AI side, all built on Claude. The employer stays unnamed here and there are no numbers, but the architecture is the same one you just saw on GitHub.

Agents and workflow automation
Operations work in payments is multi-step: read a record, check it against two or three internal systems, decide, act. I build the agents that do those steps, with every internal system behind a tool that has a schema.
Retrieval over internal knowledge
Policies, procedures and product documentation, answered with the source attached. Retrieval first, then generation constrained to what was retrieved.
Evals and operations
Nothing ships or changes without running against an eval set of real cases, with quality tracked per prompt version, so a model or prompt change shows exactly what moved.

The hardest problem: tool reliability against legacy systems

The systems an agent calls in a payments company were not built for a model to call them. Responses are inconsistent, fields mean different things in different places, and a failed write cannot be retried blindly because money is involved. So:

  • Validate at the boundary. The model never sees a raw response, only a normalised one.
  • Idempotent writes. A retry is always safe.
  • Fail closed. If a tool cannot confirm what happened, the agent stops and hands off to a person.
  • Log every call. When something looks wrong, replay exactly what the agent saw.
Internal systems feed an agent through a validating tool boundary; a knowledge base grounds it from below, evals gate it from above, and unconfirmed outcomes hand off to a person. THE SHAPE OF THE WORK · NO SPECIFICS evalsreal cases · per prompt version gates every change internalsystemslegacy · inconsistentmoney involved TOOL BOUNDARY validatenormaliseidempotent agentClaudereason · call toolsevery write througha contract we controllog every call actionconfirmed personfail closed knowledge basepolicies · procedures · product docs grounded, with source

Stack

What I reach for.

Agents

  • LangGraph
  • LangChain
  • LlamaIndex
  • MCP · Python SDK
  • MCP · FastAPI
  • MCP · TypeScript
  • Claude
  • Gemini

Retrieval

  • FAISS
  • sentence-transformers
  • spaCy
  • Neo4j
  • GraphRAG
  • knowledge graphs

Languages and backend

  • Python
  • TypeScript / JavaScript
  • C++
  • FastAPI
  • Flask
  • Node.js · Express
  • Streamlit
  • React

Data

  • MongoDB
  • MySQL
  • SQLite
  • Neo4j
  • Firebase
  • Supabase

Certifications

  • Neo4j Certified ProfessionalAug 2025
  • Oracle Cloud Infrastructure 2025 Certified AI FoundationsJul 2025
  • Oracle Generative AI ProfessionalJun 2025

Path

  • NowAI engineer at a cross-border payments fintech. Agents, retrieval and evals on Claude.
  • 2025Three certifications in generative AI, cloud AI and graph databases. Four public AI systems shipped.
  • Jun – Dec 2024Software Engineer Intern, DisruptiveNext, Pune. Telegram bot POC, a FlutterFlow engagement platform for crypto creators, and research into GraphRAG, agentic workflows and MCP.
  • 2021 – 2025B.Tech Computer Engineering, G. H. Raisoni College of Engineering and Management, Pune. 8.36 / 10.

Contact

Let's talk about the agent you're trying to trust.

Twenty minutes on a call, going deep on whichever of these is closest to what you're building. Pune, UTC+5:30, remote-friendly.