SSD Nodes Learn 🎉 VPS $4.99/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor

Agent skill, MCP server নাকি rules file: কোনটি নেবেন?

Coding agent-এ context দেওয়ার তিন পদ্ধতির token খরচ ও upkeep তুলনা করুন। Skill, MCP server এবং rules file কখন ব্যবহার করবেন, তা বাছাইয়ের সহজ নিয়ম জানুন।

Agent skills বনাম MCP server বনাম rules file: সংক্ষিপ্ত উত্তর

Agent skill, MCP server এবং rules file—সবগুলোই coding agent-এর সামনে জ্ঞান উপস্থাপন করে। কোনটি বেছে নেবেন, তা নির্ভর করে সেই জ্ঞান কী কাজ করে তার ওপর। MCP (model context protocol) এমন ডেটার জন্য, যা পরেরবার দেখার সময় পরিবর্তিত হতে পারে। Skill এমন একটি পদ্ধতির জন্য, যা আজ লিখে রাখলেও ছয় সপ্তাহ পর সঠিক থাকবে। Rules file-এ থাকে সেই অল্প কয়েকটি তথ্য, যা প্রতিটি session-এ অবশ্যই প্রযোজ্য।

এই সিদ্ধান্তের একটি মূল্য আছে, আর সেই মূল্য হলো context। Agent-এর প্রয়োজন ছিল না—এমন কোনো instruction-এ ব্যয় করা প্রতিটি token, agent যে code পড়ছে তার জন্য আর উপলব্ধ থাকে না। প্রতিটি turn-এ এর জন্য আবার অর্থও দিতে হয়, কারণ প্রতিটি request-এর সঙ্গে পুরো context window পুনরায় পাঠানো হয়। তাই কার্যকর প্রশ্নটি হলো না, কোন mechanism কাজটি করতে পারে। অধিকাংশ সময় তিনটিই পারে। প্রশ্ন হলো, idle অবস্থায় কোনটির খরচ সবচেয়ে কম।

ব্যবহারের আগে প্রতিটির খরচ কত

তিনটি ভিন্ন সময়ে লোড হয়, এবং মূল পার্থক্যটি এই সময়নির্ভর আচরণেই।

একটি rules file চালু হওয়ার সময় সম্পূর্ণভাবে লোড হয়—প্রতিটি session-এ, সেটি প্রাসঙ্গিক হোক বা না হোক। Claude Code প্রতিটি conversation-এর শুরুতে CLAUDE.md পড়ে এবং file যত বড়ই হোক, সম্পূর্ণ file লোড করে। নথিভুক্ত লক্ষ্য হলো প্রতি file-এ 200 lines-এর কম রাখা, কারণ বড় file বেশি context ব্যবহার করে এবং এর নির্দেশনা কম নির্ভরযোগ্যভাবে অনুসরণ করা হয়। এই দুটি প্রভাব একই দিকে কাজ করে। তাই 900-line rules file কার্যত উপকারের বদলে ক্ষতি করে।

একটি skill দুই ধাপে লোড হয়। startup-এর সময় প্রতিটি SKILL.md frontmatter থেকে শুধু description line context-এ যায়। ফলে model জানতে পারে skill-টি আছে এবং মোটামুটি কখন এটি প্রযোজ্য। skill invoke হলে এর body লোড হয়। তাই 400-line reference document প্রয়োজনের মুহূর্ত আসা পর্যন্ত প্রায় কোনো খরচই করে না।

আগে MCP server-ই সবচেয়ে ব্যয়বহুল ছিল। আপনি এখন যে অধিকাংশ তুলনা পড়বেন, সেগুলো এই কারণে পুরোনো। বর্তমান Claude Code-এ tool search default হিসেবে চালু থাকে। session শুরুর সময় শুধু tool name এবং server-এর instructions field লোড হয়। Claude এগুলোর জন্য search না করা পর্যন্ত সম্পূর্ণ JSON (JavaScript object notation) schema লোড হয় না। তাই server যোগ করলে আর শুরুতেই হাজার হাজার token খরচ হয় না। তবে কিছু খরচ থাকে। আর tool search বন্ধ থাকা configuration-এ সম্পূর্ণ খরচই শুরুতে হয়।

ChartStartup and post-use context cost, estimated tokens
The data behind this chart
[
  {
    "label": "Rules file, 200 lines",
    "at_startup": "2,500",
    "after_use": "2,500"
  },
  {
    "label": "Skill, 12 KB body",
    "at_startup": 40,
    "after_use": "3,000"
  },
  {
    "label": "MCP server, tool search on",
    "at_startup": 500,
    "after_use": "3,200"
  },
  {
    "label": "MCP server, tool search off",
    "at_startup": "4,500",
    "after_use": "4,500"
  }
]

এগুলো অনুমান, আপনার machine থেকে নেওয়া measurement নয়। প্রতিটি mechanism যে পরিমাণ text লোড করে, তার আকার থেকে এগুলো হিসাব করা হয়েছে; আনুমানিক প্রতি token-এ চারটি character ধরা হয়েছে। একটি 200-line rules file প্রায় 10 KB markdown, একটি skill description প্রায় 160 characters, এবং বারোটি tool প্রকাশ করা একটি server-এ প্রায় 18 KB schema-এর সঙ্গে 2 KB instructions block থাকে। Claude Code প্রতিটি tool description এবং প্রতিটি server instructions field সর্বোচ্চ 2 KB-এ truncate করে। তাই এই অংশের একটি সীমা আছে। পরের section-এ নিজের প্রকৃত সংখ্যা কীভাবে পড়বেন, তা দেখানো হয়েছে।

প্রথম দুটি row একসঙ্গে পড়ুন। এমন একটি session-এ, যেখানে কেউ rules file-টি প্রয়োজন করেনি, file-টির খরচ 2,500 token। একই session-এ skill-টির খরচ 40 token। আর প্রতি দশটি session-এর একটিতে skill চালু হলে সেই session-এ খরচ 3,000 token। শেষের দুটি row একই server-এর জন্য, একবার tool search চালু এবং একবার বন্ধ অবস্থায়: 500 token বনাম 4,500। এই ব্যবধানের কারণেই MCP context bloat সম্পর্কে পুরোনো পরামর্শ এখনও প্রচলিত।

Tool search-এর জন্য এমন model প্রয়োজন, যা tool_reference block সমর্থন করে। August 2026 অনুযায়ী এর মধ্যে Claude Sonnet 4.5, Haiku 4.5, Opus 4.5 এবং পরবর্তী version রয়েছে। ANTHROPIC_BASE_URL এমন host নির্দেশ করলে, যা first party নয়, Claude Code tool search বন্ধ করে দেয়। কারণ অধিকাংশ proxy এই block forward করে না। এটি নিয়ন্ত্রণ করতে ENABLE_TOOL_SEARCH সেট করুন: false সব schema শুরুতেই লোড করে, true সব schema defer করে, এবং auto কেবল তখনই schema শুরুতে লোড করে, যখন সেগুলো context window-এর 10%-এর মধ্যে থাকে।

# Load schemas up front only if they fit in 5% of the window
ENABLE_TOOL_SEARCH=auto:5 claude

সিদ্ধান্ত নেওয়ার প্রশ্ন: প্রতিবার ব্যবহারের মধ্যে ডেটা কি পরিবর্তিত হয়?

প্রথমে এই প্রশ্নটি করুন, কারণ এটি একটি বিকল্প সরাসরি বাদ দেয়। Agent-কে যদি এমন কিছু পড়তে বা লিখতে হয়, যা পরেরবার দেখার সময় পরিবর্তিত হতে পারে, তাহলে আপনার একটি server দরকার। যেমন issue tracker, database, monitoring dashboard বা আপনার নিজস্ব internal API (application programming interface)। তথ্য লিখে রাখলেও লাভ নেই, কারণ অন্য কেউ record সম্পাদনা করার সঙ্গে সঙ্গেই আপনার লেখা তথ্য পুরোনো হয়ে যায়।

কেউ রক্ষণাবেক্ষণ না করলেও যদি ছয় সপ্তাহ পরেও উত্তরটি সঠিক থাকে, তাহলে আপনার একটি skill দরকার। যেমন release checklist, migration procedure, error response-এর কাঠামো বা এই repository-তে test কীভাবে লিখতে হবে। একটি skill হলো git-এ থাকা একটি file। এর কোনো port বা process নেই। ভুল হওয়া ছাড়া এর আর কোনো failure mode নেই, এবং code review-তে সেই ভুল ধরা যেতে পারে।

যদি এটি এমন একটি তথ্য হয়, যা আপনার এখনো বিবেচনা না করা কাজের ক্ষেত্রেও প্রযোজ্য হবে, তাহলে সেটি rules file-এ রাখুন। Run make lint before committing. Never push to main. Handlers live in src/api/handlers/. প্রতিটি তথ্য এক লাইনে লিখুন। কোনো entry ধাপে ধাপে নির্দেশনায় পরিণত হওয়ার সঙ্গে সঙ্গে সেটি আর তথ্য থাকে না; সেটি procedure হয়ে যায় এবং skill-এ সরিয়ে নেওয়া উচিত।

যখন একটি rules file যথেষ্ট

Rules file বিভিন্ন স্থান থেকে লোড হয়। অগ্রাধিকারের পরিসর সবচেয়ে বিস্তৃত থেকে সবচেয়ে নির্দিষ্ট ক্রমে হলো: managed policy file, আপনার ব্যক্তিগত ~/.claude/CLAUDE.md, project-এর ./CLAUDE.md বা ./.claude/CLAUDE.md, এবং gitignored ./CLAUDE.local.md। আবিষ্কৃত সব file একে অপরকে override না করে পরপর যুক্ত হয়। আপনার working directory-এর কাছাকাছি থাকা file শেষে পড়া হয়।

Claude Code CLAUDE.md পড়ে, AGENTS.md নয়। আপনার repository-তে অন্য tool-এর জন্য যদি ইতিমধ্যে AGENTS.md থাকে, তাহলে পরস্পরের সঙ্গে অসামঞ্জস্যপূর্ণ হয়ে যাবে এমন দুটি copy রক্ষণাবেক্ষণ করবেন না।

ln -s AGENTS.md CLAUDE.md

সফল হলে symlink কোনো output দেখায় না। একটি session শুরু করুন, /context চালান, এবং Memory files-এর অধীনে CLAUDE.md দেখা যাচ্ছে কি না নিশ্চিত করুন। সেখানে তালিকাভুক্ত না থাকলে agent এটি কখনও দেখেনি, এবং wording পরিবর্তন করলেও কোনো ফল হবে না। Claude-specific line-ও যোগ করতে চাইলে import form ব্যবহার করুন এবং import-এর নিচে সেগুলো রাখুন।

@AGENTS.md

## Claude Code

Use plan mode for changes under `src/billing/`.

এখানে একটি গুরুত্বপূর্ণ সতর্কতা আছে। @path import context সংরক্ষণ করে না। যে file থেকে import করা হয়েছে, সেই file-এর সঙ্গে imported file-টি launch-এর সময় expand ও load হয়, সর্বোচ্চ চারটি hop পর্যন্ত। 600 লাইনের একটি rules file ছয়টি import-এ ভাগ করলে মানুষের জন্য এটি গোছানো হয়, কিন্তু token cost একেবারেই পরিবর্তিত হয় না। Layout নির্ধারণের আগে AGENTS.md এবং এর মানব-পাঠ্য সমতুল্যটির পেছনের convention পড়ে নেওয়া উপযোগী।

যা cost কমায় তা হলো একটি paths field-সহ .claude/rules/paths frontmatter-যুক্ত rules file কেবল তখনই load হয়, যখন agent এমন কোনো file-এ কাজ করে যা pattern-গুলোর একটির সঙ্গে মেলে।

---
paths:
  - "src/api/**/*.ts"
---

# API rules

- Every endpoint validates its input.
- Use the standard error response shape.

paths field না থাকা rule launch-এর সময় .claude/CLAUDE.md-এর সমান priority-তে load হয়। তাই কার্যকর পদ্ধতি হলো সংক্ষিপ্ত unconditional rule রাখা, এবং এমন যেকোনো বিষয়ের জন্য একটি paths list যোগ করা যা কেবল একটি নির্দিষ্ট directory-এর ভেতরে প্রযোজ্য।

যখন আপনি একটি skill চান

একটি skill হলো এমন একটি directory, যার ভেতরে SKILL.md থাকে। ব্যক্তিগত skill থাকে ~/.claude/skills/<name>/SKILL.md-এ এবং আপনার মেশিনের প্রতিটি project-এ প্রযোজ্য হয়। Project skill থাকে .claude/skills/<name>/SKILL.md-এ, repository-এর সঙ্গেই থাকে এবং অন্য যেকোনো file-এর মতো pull request-এ review করা যায়।

mkdir -p ~/.claude/skills/summarize-changes
---
name: summarize-changes
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---

Run `git status` and `git diff` against the merge base.
Group the changes by intent, not by file.
Call out anything touching auth, migrations or deletions.

description হলো ওই file-এর একমাত্র অংশ, যা skill চালু হওয়ার আগে context-এ থাকে। তাই এটি দুটি কাজ করে। এটি skill-এর কাজ জানায় এবং কখন সেটি ব্যবহার করতে হবে তাও জানায়। "Helps with deploys" ধরনের description কোনো request-এর সঙ্গে মেলানোর মতো তথ্য model-কে দেয় না। ফলে skill নীরবে চালু হয় না, এবং আপনি ধরে নেন যে skill কাজ করে না।

Directory-এর নামই command হয়ে যায়। তাই উপরের উদাহরণে command হবে /summarize-changes। Personal বা project skill-এ frontmatter-এর name শুধু listing-এ প্রদর্শিত label নির্ধারণ করে।

কোনো skill invoke হলে তার rendered content একটি একক message হিসেবে conversation-এ যুক্ত হয় এবং session-এর বাকি সময় সেখানে থাকে। পরবর্তী turn-এ Claude Code file-টি আবার পড়ে না। একবারের কাজের ধাপের বদলে স্থায়ী নির্দেশনা লিখুন। Body সংক্ষিপ্ত রাখুন, কারণ এরপর প্রতিটি line প্রতিটি request-এ বারবার ব্যবহৃত হয়। Auto-compaction-এর পরে Claude Code প্রতিটি skill-এর সর্বশেষ invocation আবার যুক্ত করে। প্রতিটি skill-এর প্রথম 5,000 token মিলিত 25,000 token-এর budget-এর মধ্যে রাখা হয়। একই session-এ কয়েকটি বড় skill invoke করলে সবচেয়ে পুরোনোগুলো সম্পূর্ণ বাদ পড়ে। তাই দীর্ঘ conversation-এর পরে কোনো skill-এর প্রভাব কমে গেছে বলে মনে হতে পারে। আবার invoke করলে সেটি ফিরে আসে। একই procedure একাধিক codebase-এ প্রযোজ্য হলে file কপি না করে একাধিক repository-তে একটি skill শেয়ার করুন

যখন আপনার একটি MCP server প্রয়োজন

একটি যোগ করতে মাত্র একটি command লাগে, আর transport তার ধরন নির্ধারণ করে।

# Remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp

# Remote HTTP server behind a bearer token
claude mcp add --transport http secure-api https://api.example.com/mcp \
  --header "Authorization: Bearer your-token"

# Local stdio server: everything after -- is passed through untouched
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
  -- npx -y airtable-mcp-server

-- গুরুত্বপূর্ণ। stdio server-এর ক্ষেত্রে এটি Claude Code-এর নিজস্ব option এবং আপনার server চালু করার command line-এর মধ্যে বিভাজন তৈরি করে। এটি বাদ দিলে server-এর জন্য নির্ধারিত --port 8080-কে claude mcp add-এর option হিসেবে parse করা হয়, এবং claude mcp add সেটি প্রত্যাখ্যান করে।

claude mcp list
claude mcp get notion

claude mcp add একটি Added ... line দিয়ে নিশ্চিত করে। এতে শুধু বোঝা যায় যে configuration disk-এ লেখা হয়েছে। প্রকৃত অবস্থা জানার command হলো claude mcp list, কারণ এটি প্রতিটি server-এর পাশে একটি health status দেখায়: ✔ Connected, ! Needs authentication, অথবা ✘ Failed to connect। failure status-এর অর্থ Claude Code ওই server-এ পৌঁছাতে পারেনি; list command ব্যর্থ হয়েছে, এমন নয়। একটি session-এর মধ্যে /mcp প্রতিটি server-এর জন্য একই তথ্য এবং tool count দেখায়।

MCP server-এ প্রতিটি call স্বতন্ত্র এবং প্রয়োজনীয় সবকিছু নিজের সঙ্গে বহন করে। তাই একটি MCP server আপনার আগের অনুরোধ মনে রাখে না। এটি একটি নকশাগত সিদ্ধান্ত, যার পরিণতি আপনাকেই পরিচালনা করতে হবে: সংরক্ষণযোগ্য যেকোনো state server-এর পেছনে, database অথবা file-এ রাখতে হবে, এবং এখন সেটিও আপনাকে operate করতে হবে।

MCP server হলো এমন একটি process, যা আপনাকে চালাতে হয়

Vendor comparison-এ যে খরচ বাদ পড়ে, তা হলো এই। একটি skill হলো একটি file। MCP server হলো এমন software, যা কোনো একটি স্থানে চলে। সেই স্থানটি যদি আপনার VPS (virtual private server) হয়, তাহলে এর uptime-এর দায়িত্ব আপনার।

একটি stdio server হলো কম খরচের বিকল্প। Session শুরু হলে Claude Code এটিকে child process হিসেবে চালু করে, এবং session শেষ হলে এটি বন্ধ হয়ে যায়। আলাদাভাবে monitor করার বা নিজের schedule অনুযায়ী patch করার কিছু থাকে না। Remote HTTP server হলো দীর্ঘসময় চলা service। তাই দীর্ঘসময় চলা অন্য যেকোনো service-এর মতো এরও রক্ষণাবেক্ষণ দরকার।

[Unit]
Description=Notes MCP server
After=network-online.target
Wants=network-online.target

[Service]
User=mcp
WorkingDirectory=/srv/notes-mcp
ExecStart=/usr/bin/node /srv/notes-mcp/dist/server.js
Environment=PORT=8931
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pager

systemctl is-active-এর output হিসেবে active দেখা উচিত। যদি failed দেখা যায়, তাহলে journal-এ কারণটি থাকবে। প্রথমবার চালানোর ক্ষেত্রে কারণটি প্রায় সব সময় একটি অনির্ধারিত environment variable অথবা অন্য কোনো process-এর দখলে থাকা port। এখানে Restart=on-failure ঐচ্ছিক নয়, কারণ crashed MCP server নিজে থেকে কোনো notification দেয় না। Agent যখন জানায় যে এটি আপনার issue tracker পড়তে পারছে না, তখন আপনি বিষয়টি জানতে পারেন।

Process-টিকে 127.0.0.1-এ bind করুন এবং এর সামনে TLS (transport layer security) সহ একটি reverse proxy রাখুন। যে MCP server আপনার database-এ পৌঁছাতে পারে এবং কোনো authentication ছাড়াই public port-এ উত্তর দেয়, সেটি এমন একটি database, যা আপনি প্রকাশ্যে উন্মুক্ত করেছেন। VPS-এ MCP server চালানো-এ proxy, certificate এবং firewall অংশ সঠিকভাবে দেখানো হয়েছে।

এরপর নিয়মিত কাজের পরিমাণ বাস্তবভাবে হিসাব করুন। Service-টি নিজের schedule অনুযায়ী security update নেয়। এর সঙ্গে কথা বলা agent-এর schedule-এর সঙ্গে সেই সময়সূচির সম্পর্ক নেই। এর OAuth token-এর মেয়াদ শেষ হয়, এবং অসুবিধাজনক সময়ে claude mcp list, ! Needs authentication print করা শুরু করে। এর credential কোনো config file অথবা Authorization header-এ থাকে। তাই অন্য যেকোনো secret-এর মতো এগুলোরও একই ধরনের সুরক্ষা দরকার। এটি আলাদা একটি বিস্তৃত বিষয়: AI agent-এর নাগালের বাইরে secret রাখা। একটি skill-এর ক্ষেত্রে এই কাজগুলোর কোনোটিই থাকে না।

Build করার আগে বিকল্পটির সঙ্গে তুলনা করুন। প্রস্তাবিত server-এর পেছনের data যদি প্রায় প্রতি quarter-এ একবার পরিবর্তিত হয়, তাহলে agent-কে কোথায় খুঁজতে হবে এবং field-এর অর্থ কী তা জানিয়ে দেওয়া একটি skill এমন service-এর চেয়ে সাশ্রয়ী, যেটিকে আপনাকে সব সময় চালু রাখতে হবে।

আপনার নিজের context cost কীভাবে পরিমাপ করবেন

অনুমান করা বন্ধ করে একটি session-এর মধ্যে /context চালান। এটি startup breakdown দেখায়: system prompt, memory files, tools এবং MCP servers, প্রতিটির token weight-সহ।

দুটি বিষয় পরীক্ষা করুন। Memory files-এর অধীনে নিশ্চিত করুন যে প্রত্যাশিত প্রতিটি rules file তালিকাভুক্ত আছে। কোনো file অনুপস্থিত থাকলে agent সেটি দেখতে পায় না। তাই instruction উপেক্ষা করা হলে প্রথমে এই বিষয়টি যাচাই করুন। এরপর আপনার servers-এর cost দেখুন। মাসে দুবার ব্যবহার করা কোনো server যদি ওই তালিকার সবচেয়ে বড় line-গুলোর একটি হয়, তাহলে /mcp-এ সেটি toggle off করুন এবং যেসব session-এ প্রয়োজন, সেগুলোর জন্য আবার on করুন। উভয় ক্ষেত্রেই configuration সংরক্ষিত থাকে।

একটি remote server cached 2h ago · connects on first use · 5 tools-এর মতো status-ও দেখাতে পারে। এর অর্থ হলো Claude Code startup-এর সময় connect না করে আগের session থেকে tool list পড়েছে। কোনো tool প্রথমবার call করা হলে এটি তখন connect করবে। প্রথম message থেকেই tools available থাকে, তাই কিছু ঠিক করার প্রয়োজন নেই। আপনি যদি প্রতিটি server-কে startup-এর সময় connect করাতে চান, তাহলে MCP_DISCOVERY_CACHE=0 সেট করুন। বৃহত্তর প্রেক্ষাপটের জন্য Claude Code context window পরিচালনা করা compaction-এর পরে কী টিকে থাকে তা ব্যাখ্যা করে, আর ওই token-গুলোর প্রকৃত খরচ কত সংখ্যাগুলোকে অর্থমূল্যে রূপান্তর করে।

আমার skill কেন কখনও trigger হয় না?

সাধারণ কারণ হলো description। skill চালু হওয়ার আগে context-এ এটিই একমাত্র text থাকে। তাই এতে পরিস্থিতির উল্লেখ না থাকলে কোনো match হয় না। বাক্যের মধ্যেই trigger লিখুন: "Use when the user asks what changed, wants a commit message, or asks to review their diff." অস্পষ্ট description নীরবে ব্যর্থ হয়। তাই সমস্যাটি বোঝা কঠিন।

দ্বিতীয় কারণ হলো frontmatter-এ typo। এই ত্রুটিটি সরাসরি প্রকাশ পায়। অজানা key সরাসরি প্রত্যাখ্যাত হয়:

Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name

তৃতীয় কারণ হলো location। Project skill-গুলো আপনার working directory-এর .claude/skills/ এবং repository root পর্যন্ত প্রতিটি parent directory থেকে load হয়। আপনি যেখান থেকে কাজ শুরু করেছেন, তার নিচের nested directory-তে থাকা skill launch-এর সময় load হয় না। Agent ওই subdirectory-র কোনো file প্রথমবার পড়লে বা edit করলে skill-গুলো load হয়। তার আগে সেগুলো autocomplete-এ দেখা যায় না এবং name দিয়ে invoke করা যায় না।

MCP-তে এর সমতুল্য নীরব ব্যর্থতা হলো .mcp.json entry-তে url থাকা কিন্তু type না থাকা। type ছাড়া যেকোনো entry-কে Claude Code stdio server হিসেবে পড়ে। তাই entry-টি skip করে এবং এই message দেখায়:

MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry

তিনটিকে একসঙ্গে ব্যবহার

এই প্রক্রিয়াগুলো একই জায়গার জন্য প্রতিযোগিতা করে না। কার্যকর setup-এ প্রতিটিকে সেই জায়গায় ব্যবহার করা হয়, যেখানে তা প্রয়োগ করা সবচেয়ে সহজ। Rules file-এ অল্প কয়েকটি line থাকে, যেগুলো সব জায়গায় প্রযোজ্য। Skills-এ procedure থাকে এবং প্রয়োজন হলেই সেগুলো load হয়। একটি MCP server, প্রয়োজনে দুটি, এমন system-এর সঙ্গে সংযোগ করে যার content আগে থেকে নির্ধারণ করা যায় না। প্রথমটির mental model এখনও তৈরি করে থাকলে, agent skill আসলে কী format সম্পর্কে বিস্তারিত ব্যাখ্যা করে।

কোনো কিছু কোথায় থাকা উচিত, তা নিয়ে বেশির ভাগ মতভেদ একটি পরীক্ষাতেই মেটানো যায়। সেটি মুছে fresh session শুরু করে agent-কে task দিন। Agent শুধু ধীর হলে, সেটি skill-এ থাকা উচিত ছিল। Agent আত্মবিশ্বাসের সঙ্গে ভুল উত্তর দিলে, সেটি rules file-এ থাকা উচিত ছিল। Agent তথ্য একেবারেই পেতে না পারলে, server প্রয়োজন ছিল; এখন সেই server সচল রাখার পরিকল্পনাও প্রয়োজন।

FAQ

আমার কি একটি skill লিখব, নাকি একটি MCP server চালু করব?

একটি invocation থেকে পরের invocation-এর মধ্যে তথ্য পরিবর্তিত হয় কি না, তার ভিত্তিতে সিদ্ধান্ত নিন। issue tracker, database বা dashboard-এর মতো অন্য কেউ সম্পাদনা করতে পারে এমন live state agent-কে পড়তে হলে MCP server প্রয়োজন, কারণ record পরিবর্তিত হওয়ার সঙ্গে সঙ্গে লিখে রাখা যেকোনো তথ্য পুরোনো হয়ে যায়। আপনি যদি একবার উত্তর লিখে রাখার পরেও ছয় সপ্তাহ পরে সেটি সঠিক থাকে, তাহলে skill লিখুন। skill হলো git-এ থাকা একটি file; এটি চালানোর জন্য কোনো process, expose করার জন্য কোনো port বা বজায় রাখার জন্য কোনো patch schedule লাগে না। তাই সম্ভব হলে এটিই কম খরচের বিকল্প।

MCP server কি এখনও আমার context window পূর্ণ করে দেয়?

আগের তুলনায় অনেক কম। বর্তমান Claude Code-এ tool search ডিফল্টভাবে চালু থাকে। তাই session শুরুতে শুধু tool-এর নাম এবং server-এর instructions field load হয়। Claude সেগুলো খুঁজলে full schema আনা হয়। tool search বন্ধ থাকলে শুরুতেই সম্পূর্ণ তথ্য load হয়: ENABLE_TOOL_SEARCH=false ব্যবহার করলে, ANTHROPIC_BASE_URL-কে first-party নয় এমন proxy-তে নির্দেশ করলে, অথবা Claude 4.5 generation-এর চেয়ে পুরোনো model ব্যবহার করলে। আপনি কোন পরিস্থিতিতে আছেন তা দেখতে /context চালান, কারণ পুরোনো comparison post-গুলোর সংখ্যাগুলো upfront loading ধরে নেওয়া।

Claude Code কি AGENTS.md পড়ে?

না। Claude Code CLAUDE.md পড়ে। আপনার repository-তে অন্য agent-এর জন্য ইতিমধ্যে AGENTS.md থাকলে দুটি copy না রেখে একটিকে অন্যটির দিকে নির্দেশ করুন। সাধারণ symlink তৈরি করতে ln -s AGENTS.md CLAUDE.md চালান। অথবা CLAUDE.md-এর প্রথম লাইনে @AGENTS.md যোগ করুন এবং তার নিচে Claude-specific instruction লিখুন। এরপর একটি session শুরু করে /context চালান, যাতে Memory files-এর অধীনে CLAUDE.md দেখা যাচ্ছে কি না নিশ্চিত করা যায়।

একটি session-এর মাঝপথে আমার skill কাজ করা বন্ধ করল কেন?

সাধারণত কারণটি হলো auto-compaction। conversation সংক্ষিপ্ত করার সময় Claude Code প্রতিটি skill-এর সর্বশেষ invocation আবার সংযুক্ত করে। প্রতিটি skill থেকে প্রথম 5,000 token রাখা হয় এবং সব skill মিলিয়ে মোট budget থাকে 25,000 token। সর্বশেষে invoke করা skill থেকে এই budget পূরণ করা হয়। তাই একাধিক বড় skill invoke করলে পুরোনোগুলো সম্পূর্ণ বাদ পড়ে যেতে পারে। সম্পূর্ণ content আবার আনতে skill-টি পুনরায় invoke করুন।

একটি দীর্ঘ rules file যাতে প্রতিটি session-এ load না হয়, তা কীভাবে বন্ধ করব?

শুধু নির্দিষ্ট সময়ে প্রয়োজনীয় অংশগুলো .claude/rules/ file-এ সরিয়ে নিন এবং তাদের frontmatter-এ paths field ব্যবহার করুন। এতে agent matching file-এ কাজ করলেই প্রতিটি file load হবে। file-টিকে @path import-এ ভাগ করলে উপকার হবে না, কারণ referenced file-এর সঙ্গে imported file-গুলোও launch-এর সময় expand ও load হয়। কোনো বিষয় যদি standing fact না হয়ে বহু-ধাপের procedure হয়, সেটিকে skill বানান। skill invoke না করা পর্যন্ত skill body-এর জন্য কোনো খরচ হয় না।