Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/graycodeai/starling/mdc-langchain-jsnpx skills add GrayCodeAI/starling --skill mdc-langchain-jsgit clone --depth 1 https://github.com/GrayCodeAI/starlingWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00042 | $0.03849 |
| Opus 5 | $0.00021 | $0.01924 |
| Sonnet 5 | $0.00008 | $0.00770 |
| Haiku 4.5 | $0.00004 | $0.00385 |
Grade A, and why
mdc-langchain-js scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 523 lines — stays where its author put it; the contents beside it link to each section on GitHub.
langchain-js Best Practices
Building LLM-powered applications with langchain-js requires a disciplined approach to ensure maintainability, performance, and reliability. This guide outlines our team's definitive best practices.
1. Code Organization and Structure
Always prioritize modularity and explicit typing. Break down complex logic into small, reusable components.
1.1. Modular Components & Single Responsibility
Each LangChain component (Agent, Tool, Chain, Model) should reside in its own file or a dedicated module, adhering to the Single Responsibility Principle.
❌ BAD: Monolithic file
// src/agent.js
import { ChatOpenAI } from "@langchain/openai";
import { createAgent, tool } from "langchain";
import { z } from "zod";
const getStockPrice = tool(async ({ ticker }) => { /* ... */ }, { /* ... */ });
const getNews = tool(async ({ query }) => { /* ... */ }, { /* ... */ });
const model = new ChatOpenAI({ temperature: 0.7 });
const agent = createAgent({
model,
tools: [getStockPrice, getNews],
});
export async function runFinancialAgent(input) {
return agent.invoke(input);
}
✅ GOOD: Modular, reusable components
// src/tools/getStockPrice.ts
import { tool } from "langchain";
import { z } from "zod";
export const getStockPriceTool = tool(
async ({ ticker }: { ticker: string }) => {
// Simulate API call
if (ticker === "AAPL") return "$170.00";
return "Price not found.";
},
{
name: "get_stock_price",
description: "Get the current stock price for a given ticker symbol.",
schema: z.object({
ticker: z.string().describe("The stock ticker symbol (e.g., AAPL)"),
}),
}
);
// src/tools/getNews.ts
import { tool } from "langchain";
import { z } from "zod";
export const getNewsTool = tool(
async ({ query }: { query: string }) => {
// Simulate API call
return `Latest news for ${query}: Market is up!`;
},
{
name: "get_news",
description: "Get the latest news for a given query.",
schema: z.object({
query: z.string().describe("The news query"),
}),
}
);
// src/agents/financialAgent.ts
import { ChatOpenAI } from "@langchain/openai";
import { createAgent } from "langchain";
import { getStockPriceTool } from "tools/getStockPrice";
import { getNewsTool } from "tools/getNews";
const model = new ChatOpenAI({ temperature: 0.7 });
export const financialAgent = createAgent({
model,
tools: [getStockPriceTool, getNewsTool],
});
// src/index.ts (or wherever the agent is invoked)
import { financialAgent } from "./agents/financialAgent";
async function main() {
const result = await financialAgent.invoke({
messages: [{ role: "user", content: "What's the price of AAPL and the latest market news?" }],
});
console.log(result);
}
main();
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 523 lines · 42 tokens per session scan A ede112a402b4
mdc-langchain-js is a skill published in the GitHub repository GrayCodeAI/starling (2 stars, last pushed 3d ago), licensed MIT. It adds 42 tokens to every session and 3,849 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
extension-creator
Create, scaffold, customize, validate, and locally test Qwen Code extensions. Use when the user wants a new Qwen Code extension, needs help choosing an extension template, wants to add QWEN.md context, commands, skills, agents, MCP servers, settings, hooks, channels, or LSP servers, or asks how to link and test an…
mcp-discovery
Prefer a matching zero-environment local MCP server for specialized tasks, even when built-in shell commands or custom code could also solve them.
google-agents-cli-observability
This skill should be used when the user wants to "set up tracing", "monitor my agent", "configure logging", "add observability", "debug production traffic", or needs guidance on monitoring deployed agents, including ADK (Agent Development Kit) agents. Covers Cloud Trace, prompt-response logging, BigQuery Agent…
google-agents-cli-scaffold
This skill should be used when the user wants to "create an agent project", "start a new ADK project", "build me a new agent", "add CI/CD to my project", "add deployment", "enhance my project", or "upgrade my project". Part of the agents-cli skills suite. Covers agents-cli scaffold create, scaffold enhance, and…
delegate-setup
Configure delegation fleet lanes: which implementer CLI handles which kind of work, with optional model and effort (or variant) dials. Discovers installed CLIs, proposes a lane map for user approval, and writes global or project config only after explicit yes. Use when the user asks to set up, configure, or…
warp-delegate
Delegate a coding task to the Warp Agent CLI (oz) as a background implementer, then review its diff and land it yourself. Use this whenever the user wants to hand implementation work to Warp - phrasings like "have Warp implement X", "delegate this to the Warp CLI", "run it through Warp", "use oz to…