SEASON 2 · EPISODE 5সিজন ২ · এপিসোড ৫

MCP & TOOLS MCP & টুলস

REACHING BEYOND THE CODEBASE কোডবেসের বাইরে পৌঁছানো

HABIB · BACKEND ENGINEER, NOP-STATION "My skill needs to pull open Jira tickets for the sprint report — but Claude only has access to files. I can't copy-paste the board every morning just to make this work." "আমার স্কিলটার Jira থেকে ওপেন টিকেট দরকার স্প্রিন্ট রিপোর্টের জন্য — কিন্তু Claude শুধু ফাইলেই অ্যাক্সেস পায়। প্রতিদিন সকালে বোর্ড কপি-পেস্ট করা সম্ভব না।"
This episode: tools, MCP, security gating, and a live sprint-report build. এই এপিসোডে: টুলস, MCP, সিকিউরিটি গেটিং, এবং একটা লাইভ স্প্রিন্ট-রিপোর্ট বিল্ড।
FOUNDATIONভিত্তি

Tools = What Claude Can Doটুলস = Claude যা করতে পারে

📁
Read / Write Filesফাইল পড়া/লেখা
Read, edit, create files in the project treeপ্রজেক্টের ফাইল পড়া, এডিট, তৈরি করা
💻
Bash / Shellব্যাশ / শেল
Run terminal commands, scripts, testsটার্মিনাল কমান্ড, স্ক্রিপ্ট, টেস্ট রান করা
🌐
Web Fetchওয়েব ফেচ
Retrieve pages, download docsপেজ রিট্রিভ করা, ডক ডাউনলোড করা
🔍
Grep / Searchগ্রেপ / সার্চ
Find patterns in the codebaseকোডবেসে প্যাটার্ন খোঁজা
🔌
MCP ToolsMCP টুলস
External systems — Jira, Slack, GitHub…বাইরের সিস্টেম — Jira, Slack, GitHub…
Skills are procedures that orchestrate tools. The skill says what to do; a tool call is the step that actually does it. স্কিলগুলো হলো প্রসিজার যা টুলগুলোকে অর্কেস্ট্রেট করে। স্কিল বলে কী করতে হবে; টুল কল সেটা আসলে করে।
THE GAPসীমাবদ্ধতা

Files & Shell Aren't Enoughফাইল আর শেল যথেষ্ট নয়

CAN'T DO (BUILT-IN)পারে না (বিল্ট-ইন)
  • ✗ Query Jira for open tickets✗ Jira থেকে টিকেট আনা
  • ✗ Post to a Slack channel✗ Slack চ্যানেলে পোস্ট করা
  • ✗ Read a GitHub PR's review comments✗ GitHub PR-এর রিভিউ কমেন্ট পড়া
  • ✗ Query a live database✗ লাইভ ডেটাবেস কোয়েরি করা
  • ✗ Call a proprietary internal API✗ প্রোপ্রাইটারি ইন্টার্নাল API কল করা
CAN DO (WITH MCP)পারে (MCP দিয়ে)
  • ✓ Fetch Jira sprint board, create tickets✓ Jira স্প্রিন্ট বোর্ড ফেচ, টিকেট তৈরি
  • ✓ Send or read Slack messages✓ Slack মেসেজ পাঠানো বা পড়া
  • ✓ Open PRs, read CI status on GitHub✓ GitHub-এ PR খোলা, CI স্ট্যাটাস পড়া
  • ✓ Execute SQL on a connected DB✓ সংযুক্ত DB-তে SQL চালানো
  • ✓ Any API you wrap as an MCP server✓ যেকোনো API যা MCP সার্ভার হিসেবে র‍্যাপ করা
MCP is the bridge that turns Claude from a file-and-shell worker into a system-aware agent.MCP হলো সেই সেতু যা Claude-কে ফাইল-এন্ড-শেল ওয়ার্কার থেকে সিস্টেম-অ্যাওয়্যার এজেন্টে পরিণত করে।
ENTER MCPMCP আসছে

Model Context Protocolমডেল কনটেক্সট প্রোটোকল

An open standard for connecting AI models to external tools, data sources, and APIs — so Claude can call them the same way it calls any built-in tool. একটি ওপেন স্ট্যান্ডার্ড যা AI মডেলকে বাইরের টুল, ডেটা সোর্স এবং API-এর সাথে সংযুক্ত করে — যাতে Claude সেগুলোকে বিল্ট-ইন টুলের মতোই কল করতে পারে।
OPEN STANDARDওপেন স্ট্যান্ডার্ড DISCOVERABLE TOOLSআবিষ্কারযোগ্য টুলস ANY EXTERNAL SYSTEMযেকোনো বাইরের সিস্টেম SECURE + GATEDনিরাপদ + গেটেড
AGENT · HABIB'S SESSION "I can see a tool called mcp__jira__get_sprint_issues. Let me call it with the current sprint ID." "আমি একটা টুল দেখতে পাচ্ছি mcp__jira__get_sprint_issues। বর্তমান স্প্রিন্ট ID দিয়ে কল করি।"
HOW IT WORKSকীভাবে কাজ করে

The MCP Request LoopMCP রিকোয়েস্ট লুপ

MCP Server
exposes tools
MCP সার্ভার
টুল এক্সপোজ করে
→
Claude
discovers them
Claude
আবিষ্কার করে
→
Claude
calls a tool
Claude
টুল কল করে
→
Server
returns data
সার্ভার
ডেটা ফেরত দেয়
→
Claude uses
the result
Claude
ফলাফল ব্যবহার করে
The MCP server runs as a separate process. Claude communicates with it over a local socket or stdio — no internet roundtrip required for local servers.MCP সার্ভার একটি আলাদা প্রসেস হিসেবে চলে। Claude লোকাল সকেট বা stdio দিয়ে সেটার সাথে যোগাযোগ করে — লোকাল সার্ভারের জন্য কোনো ইন্টারনেট রাউন্ডট্রিপ লাগে না।
Tool names follow the convention: mcp__<server-name>__<tool-name>টুলের নাম কনভেনশন: mcp__<সার্ভার-নাম>__<টুল-নাম>
CONFIGURATIONকনফিগারেশন

Registering an MCP ServerMCP সার্ভার রেজিস্ট্রেশন

RIFAT · SENIOR ENGINEER "Add it to .claude/settings.json under mcpServers. Claude picks it up automatically on next launch." ".claude/settings.json-এ mcpServers-এর নিচে যোগ করো। পরের লঞ্চে Claude এটা স্বয়ংক্রিয়ভাবে তুলে নেবে।"
// .claude/settings.json { "mcpServers": { "jira": { "command": "npx", "args": ["-y", "@nop-station/mcp-jira"], "env": { "JIRA_BASE_URL": "https://nop-station.atlassian.net", "JIRA_TOKEN": "<YOUR_JIRA_API_TOKEN>", "JIRA_EMAIL": "habib@nop-station.com" } } } }
Once registered, Claude discovers all tools the server exposes. They appear in the tool list as mcp__jira__*. Secrets go in env — never hardcoded in the skill body.একবার রেজিস্টার করলে Claude সার্ভারের সব টুল আবিষ্কার করে। সেগুলো টুল লিস্টে mcp__jira__* হিসেবে দেখায়। সিক্রেট env-এ যায় — স্কিল বডিতে হার্ডকোড করা নয়।
DECISION POINTসিদ্ধান্তের বিন্দু

When to Wrap an API as an MCP Toolকখন API-কে MCP টুল হিসেবে র‍্যাপ করবেন

WRAP IT WHEN…র‍্যাপ করো যখন…
  • ✓ You need it more than once a week✓ সপ্তাহে একবারের বেশি দরকার
  • ✓ It's a live system (not a static doc)✓ এটা লাইভ সিস্টেম (স্ট্যাটিক ডক নয়)
  • ✓ Multiple team members will use it✓ একাধিক টিম সদস্য ব্যবহার করবে
  • ✓ You want to compose it inside skills✓ স্কিলের ভেতরে কম্পোজ করতে চাও
SKIP IT WHEN…এড়িয়ে যাও যখন…
  • ✗ One-off fetch you'll never repeat✗ একবারের ফেচ, আর কখনো নয়
  • ✗ Public URL Claude can just WebFetch✗ পাবলিক URL Claude সরাসরি WebFetch করতে পারে
  • ✗ Data fits in a file you can commit✗ ডেটা একটা ফাইলে ধরে যায় যা কমিট করা যায়
  • ✗ No auth needed, no rate limits✗ কোনো অথ নেই, রেট লিমিট নেই
Rule of thumb: if you'd reach for a real API client in code, you should probably wrap it as an MCP tool.সহজ নিয়ম: কোডে যদি রিয়েল API ক্লায়েন্ট ব্যবহার করতেন, সম্ভবত MCP টুল হিসেবে র‍্যাপ করা উচিত।
COMPOSITIONকম্পোজিশন

Skills Orchestrate MCP Toolsস্কিলস MCP টুলস অর্কেস্ট্রেট করে

A skill's body is plain instructions. It can reference MCP tool names directly — Claude will call them at runtime.একটা স্কিলের বডি সরল নির্দেশনা। এটা সরাসরি MCP টুলের নাম রেফার করতে পারে — Claude রানটাইমে সেগুলো কল করবে।
## skill: sprint-status ## Fetches live sprint data and posts a summary to Slack. 1. Use mcp__jira__get_sprint_issues with project=NOPST and sprint=active to fetch all open tickets. 2. Group tickets by status: To Do / In Progress / Done. 3. Format a standup summary: - Count per status, list blockers (tickets with label=blocked). - Mention the top 3 In-Progress tickets with assignee. 4. Use mcp__slack__send_message channel=#dev-standup to post the formatted summary. 5. Reply to the user with a confirmation + ticket count.
The skill body never hardcodes data — it commands Claude to fetch it live at run time. This is what makes skills dynamic, not static.স্কিল বডি কখনো ডেটা হার্ডকোড করে না — এটা Claude-কে লাইভে ফেচ করতে নির্দেশ দেয়। এটাই স্কিলকে ডায়নামিক করে।
SECURITYসিকিউরিটি

Tool Gating & Permissionsটুল গেটিং এবং পারমিশন

ALLOW / DENY LISTSঅ্যালাউ / ডিনাই লিস্ট
// settings.json { "permissions": { "allow": [ "mcp__jira__get_sprint_issues", "mcp__jira__get_issue", "mcp__slack__send_message" ], "deny": [ "mcp__jira__delete_issue", "mcp__jira__transition_issue" ] } }
APPROVAL GATESঅ্যাপ্রুভাল গেট
Some tool calls require human sign-off before Claude proceeds. Claude surfaces a confirmation prompt — no action taken until you type yes. কিছু টুল কলের জন্য Claude এগোনোর আগে মানুষের অনুমোদন দরকার। Claude একটি কনফার্মেশন প্রম্পট দেখায় — আপনি yes না লেখা পর্যন্ত কোনো কাজ হয় না।
💡 Callback to S1·E6: the same enterprise safety controls — budget limits, allow-lists, audit logs — apply to MCP tools too. 💡 S1·E6-এর কথা মনে করুন: একই এন্টারপ্রাইজ সেফটি কন্ট্রোল — বাজেট লিমিট, অ্যালাউ-লিস্ট, অডিট লগ — MCP টুলেও প্রযোজ্য।
Principle: grant the minimum tool surface your skill actually needs. A sprint-report skill never needs to delete tickets.নীতি: স্কিলের আসলে যা দরকার তার ন্যূনতম টুল সারফেস দাও। স্প্রিন্ট-রিপোর্ট স্কিলের কখনো টিকেট ডিলিট করার দরকার নেই।
ECOSYSTEMইকোসিস্টেম

TypeScript, Python & the CommunityTypeScript, Python এবং কমিউনিটি

TypeScript
Official SDK
@modelcontextprotocol/sdk
Best for Node.js APIs
অফিশিয়াল SDK
Node.js API-এর জন্য সেরা
Python
Official SDK
mcp (PyPI package)
Best for data / ML tools
অফিশিয়াল SDK
ডেটা / ML টুলের জন্য সেরা
Official Serversঅফিশিয়াল সার্ভার
GitHub, Slack, PostgreSQL, Filesystem, Fetch, Puppeteer…GitHub, Slack, PostgreSQL, Filesystem, Fetch, Puppeteer…
Community Serversকমিউনিটি সার্ভার
Jira, Linear, Notion, Figma, Supabase, AWS and many moreJira, Linear, Notion, Figma, Supabase, AWS এবং আরও অনেক
Build Your Ownনিজে তৈরি করো
Wrap any in-house REST API in < 50 lines. The SDK handles the protocol.যেকোনো ইন-হাউস REST API ৫০ লাইনের কমে র‍্যাপ করো।
The registry at github.com/modelcontextprotocol/servers lists official and community-verified servers. Vet before installing — see Slide 13.github.com/modelcontextprotocol/servers-এ অফিশিয়াল ও কমিউনিটি-ভেরিফাইড সার্ভারের তালিকা আছে। ইনস্টলের আগে যাচাই করুন — স্লাইড ১৩ দেখুন।
LIVE BUILDলাইভ বিল্ড

Sprint Report Skill — Planস্প্রিন্ট রিপোর্ট স্কিল — পরিকল্পনা

STEP 1ধাপ ১
Register the Jira MCP server in settings.json settings.json-এ Jira MCP সার্ভার রেজিস্টার করো
STEP 2ধাপ ২
Write the skill body that calls mcp__jira__get_sprint_issues স্কিল বডি লিখো যা mcp__jira__get_sprint_issues কল করে
STEP 3ধাপ ৩
Run /sprint-report — Claude fetches live data & outputs summary /sprint-report চালাও — Claude লাইভ ডেটা ফেচ করে সারসংক্ষেপ দেয়
HABIB "Ankan — we're building this right now. Jira MCP is already installed. Let's wire the skill." "অঙ্কন — এটা এখনই বানাচ্ছি। Jira MCP ইতিমধ্যে ইনস্টল আছে। স্কিলটা ওয়্যার করি।"
LIVE BUILD — CODEলাইভ বিল্ড — কোড

Config & Skill Bodyকনফিগ এবং স্কিল বডি

.claude/settings.json (excerpt).claude/settings.json (অংশ)
{ "mcpServers": { "jira": { "command": "npx", "args": [ "-y", "@nop-station/mcp-jira" ], "env": { "JIRA_BASE_URL": "https://nop-station.atlassian.net", "JIRA_TOKEN": "<YOUR_JIRA_API_TOKEN>", "JIRA_EMAIL": "habib@nop-station.com" } } }, "permissions": { "allow": [ "mcp__jira__get_sprint_issues", "mcp__jira__get_issue" ] } }
.claude/skills/sprint-report/prompt.md.claude/skills/sprint-report/prompt.md
## Sprint Report Skill ## Generates a standup summary from live Jira data. # Steps 1. Call mcp__jira__get_sprint_issues with project="NOPST", sprint="active". 2. Group issues by status field: - To Do / In Progress / Done / Blocked 3. Build the standup summary: **Sprint Summary — {today}** ✅ Done ({n}): <titles> 🔄 In Progress ({n}): <titles + assignee> 🚧 Blocked ({n}): <titles + blocker label> 📋 To Do ({n}): <titles> 4. If >0 blocked tickets, add a "⚠️ Action needed" section with details. 5. Output the summary in Markdown. Ask user if they want to post to Slack.
LIVE OUTPUTলাইভ আউটপুট

Running /sprint-report/sprint-report চালানো

$ /sprint-report → Calling mcp__jira__get_sprint_issues (project=NOPST, sprint=active)... → Retrieved 18 issues. **Sprint Summary — 2026-06-20 (Sprint 41 · nop-station)** ✅ Done (6): Payment gateway refactor, Auth token refresh fix, Dashboard load perf, Email validation, DB index tuning, Unit tests OrderSvc 🔄 In Progress (7): Product search API · Mouneeta Shipping calculator · Rafid Admin panel filters · Ankan ... (4 more) 🚧 Blocked (2): Inventory sync — waiting on vendor API docs (Mouneeta) PDF invoice — design handoff pending (Rafid) 📋 To Do (3): Returns flow, Multi-currency support, Rate limiter ⚠️ Action needed: NOPST-412 (Inventory sync) blocked > 3 days. Assign a resolver. Post this to #dev-standup? [yes/no]
No copy-paste from Jira. No manual updates. One slash command — live data, structured output, ready to share.Jira থেকে কপি-পেস্ট নেই। ম্যানুয়াল আপডেট নেই। একটা স্ল্যাশ কমান্ড — লাইভ ডেটা, স্ট্রাকচার্ড আউটপুট, শেয়ারের জন্য প্রস্তুত।
GOTCHASসতর্কতা

MCP Pitfalls to AvoidMCP-এর ভুলগুলো এড়ানো

  • 🔑
    Secrets in the skill bodyস্কিল বডিতে সিক্রেট
    Never write API tokens or passwords in prompt.md. Use env in settings.json — and never commit settings.json with real values to git. prompt.md-তে কখনো API টোকেন বা পাসওয়ার্ড লিখবেন না। settings.json-এ env ব্যবহার করুন — এবং সত্যিকার মান দিয়ে settings.json কখনো git-এ কমিট করবেন না।
  • 🌐
    Over-broad tool permissionsঅতিরিক্ত টুল পারমিশন
    Allowing mcp__jira__* gives Claude write access to every Jira action. Be explicit: allow only the tools the skill actually calls. mcp__jira__* অ্যালাউ করলে Claude সব Jira অ্যাকশনে রাইট অ্যাক্সেস পায়। স্পষ্ট হোন: শুধু স্কিল যা কল করে সে টুলগুলোই অ্যালাউ করুন।
  • 📦
    Unverified third-party MCP serversযাচাইবিহীন থার্ড-পার্টি MCP সার্ভার
    A malicious MCP server can exfiltrate data or execute destructive actions. Only install servers from trusted sources; review the source before running. একটি দুর্ভাবনামূলক MCP সার্ভার ডেটা চুরি করতে বা ক্ষতিকর কাজ চালাতে পারে। শুধুমাত্র বিশ্বস্ত সোর্স থেকে সার্ভার ইনস্টল করুন; চালানোর আগে সোর্স রিভিউ করুন।
  • ⏱️
    No rate-limit awarenessরেট-লিমিট সচেতনতার অভাব
    Claude won't automatically throttle tool calls. A looping skill can hit Jira's rate limit in seconds. Add retry logic or a delay step in the skill body. Claude স্বয়ংক্রিয়ভাবে টুল কল থ্রটল করবে না। লুপিং স্কিল সেকেন্ডে Jira-র রেট লিমিটে পৌঁছাতে পারে। স্কিল বডিতে রিট্রি লজিক বা ডিলে স্টেপ যোগ করুন।
TEAM DISCUSSIONটিম আলোচনা

A Good Question from Ankanঅঙ্কনের একটা ভালো প্রশ্ন

SHAZZAD · FRONTEND ENGINEER "If the MCP server crashes mid-run, does Claude know? Or does the skill just hang silently?" "MCP সার্ভার রান করতে করতে ক্র্যাশ করলে Claude কি জানতে পারে? নাকি স্কিল চুপচাপ আটকে থাকে?"
RIFAT "Claude gets a tool error back and will try to recover — it'll tell you the tool failed. Build your skill with a fallback step: 'If the MCP tool errors, report the raw error and stop.' That makes failures visible." "Claude একটা টুল এরর ফেরত পায় এবং রিকভারি করার চেষ্টা করে — এটা আপনাকে বলবে টুলটা ফেল করেছে। স্কিলে একটা ফলব্যাক স্টেপ বানান: 'MCP টুল এরর করলে, রাউ এরর রিপোর্ট করো এবং থামো।' এটা ব্যর্থতা দৃশ্যমান করে।"
Design your skills to fail loudly, not silently. An explicit error step is better than a stalled session.স্কিলগুলো শোরগোলে ব্যর্থ হওয়ার জন্য ডিজাইন করুন, নীরবে নয়। একটি স্পষ্ট এরর স্টেপ স্থবির সেশনের চেয়ে ভালো।
ADVANCEDঅ্যাডভান্সড

Building Your Own MCP Serverনিজের MCP সার্ভার তৈরি করা

If no community server covers your in-house API, build one in TypeScript with the official SDK — it takes less than 50 lines for a basic read-only tool.যদি কোনো কমিউনিটি সার্ভার আপনার ইন-হাউস API কভার না করে, অফিশিয়াল SDK দিয়ে TypeScript-এ একটা তৈরি করুন — বেসিক রিড-অনলি টুলের জন্য ৫০ লাইনের কম লাগে।
// my-api-mcp/index.ts (TypeScript, official SDK) import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; const server = new McpServer({ name: "my-api", version: "1.0.0" }); server.tool( "get_open_orders", { limit: z.number().default(20) }, async ({ limit }) => { const data = await fetchOrders({ status: "open", limit }); return { content: [{ type: "text", text: JSON.stringify(data) }] }; } ); const transport = new StdioServerTransport(); await server.connect(transport);
Register it in settings.json just like any other server. Your entire team can then call mcp__my-api__get_open_orders from any skill.settings.json-এ অন্য সার্ভারের মতোই রেজিস্টার করুন। তারপর পুরো টিম যেকোনো স্কিল থেকে mcp__my-api__get_open_orders কল করতে পারবে।
MENTAL MODELমানসিক মডেল

How It All Fits Togetherসব একসাথে কীভাবে খাপ খায়

Skill — the "what to do" procedure স্কিল — "কী করতে হবে"-এর প্রসিজার
→
Claude (agent) — reads the skill, plans tool calls Claude (এজেন্ট) — স্কিল পড়ে, টুল কল পরিকল্পনা করে
→
MCP Tool — executes against real system, returns data MCP টুল — রিয়েল সিস্টেমে চালু হয়, ডেটা ফেরত দেয়
→
Output — structured result, posted / returned to user আউটপুট — স্ট্রাকচার্ড ফলাফল, পোস্ট / ব্যবহারকারীকে ফেরত
Skills define the shape. Claude executes it. MCP tools reach out. The result comes back — clean, structured, actionable.স্কিলস আকৃতি নির্ধারণ করে। Claude সেটা চালায়। MCP টুলস বাইরে পৌঁছায়। ফলাফল ফিরে আসে — পরিষ্কার, স্ট্রাকচার্ড, কার্যকর।
WRAP UPসারসংক্ষেপ

MCP & Tools — What You Now KnowMCP এবং টুলস — এখন তুমি যা জানো

TOOLS · BUILT-IN vs MCPটুলস · বিল্ট-ইন বনাম MCP MCP · OPEN STANDARDMCP · ওপেন স্ট্যান্ডার্ড GATING · LEAST PRIVILEGEগেটিং · ন্যূনতম সুবিধা LIVE DATA · IN SKILLSলাইভ ডেটা · স্কিলের ভেতরে
3 RULES TO LIVE BY৩টি নিয়ম
  • 1. Secrets stay in env, never in skill body১. সিক্রেট env-এ থাকে, স্কিল বডিতে নয়
  • 2. Allow only the tools the skill actually calls২. স্কিল যা কল করে শুধু সে টুলগুলো অ্যালাউ করো
  • 3. Vet third-party MCP servers before installing৩. ইনস্টলের আগে থার্ড-পার্টি MCP সার্ভার যাচাই করো
HABIB'S WINমৌনিতাের জয়
"The sprint-report skill now runs in 8 seconds. Before: 12 minutes of manual Jira browsing every morning." "স্প্রিন্ট-রিপোর্ট স্কিল এখন ৮ সেকেন্ডে চলে। আগে: প্রতিদিন সকালে ১২ মিনিট ম্যানুয়াল Jira ব্রাউজিং।"
Next → Episode 6: Skills at Team Scale — Training the Guild.
Onboarding new engineers, skill libraries, shared conventions, and keeping quality high as the team grows.
পরবর্তী → এপিসোড ৬: টিম স্কেলে স্কিলস — গিল্ড প্রশিক্ষণ।
নতুন ইঞ্জিনিয়ার অনবোর্ডিং, স্কিল লাইব্রেরি, শেয়ার্ড কনভেনশন এবং টিম বাড়ার সাথে মান বজায় রাখা।
← → to navigate · space to advance