{"id":"2bd0639b-c8bd-4dbb-b198-4baf0441cfea","shortId":"zjLjG9","kind":"skill","title":"litestar-mcp","tagline":"Auto-activate for litestar_mcp imports, LitestarMCP, MCPConfig, MCPController, @mcp_tool, @mcp_resource, JSON-RPC route exposure, route filtering, or OAuth/Guard-protected MCP endpoints. Use when exposing Litestar routes as MCP tools or resources. Not for non-Litestar MCP servers","description":"# litestar-mcp\n\n`litestar-mcp` exposes Litestar route handlers as [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) tools and resources over JSON-RPC 2.0. The plugin discovers routes via the Litestar OpenAPI schema and serves them at `POST /mcp/` (configurable).\n\nGET handlers become **resources** (read-only); POST/PUT/PATCH/DELETE handlers become **tools** (mutations). Per-route overrides via `@mcp_tool`, `@mcp_resource`, or `opt={...}` dicts.\n\n## Code Style Rules\n\n- PEP 604 unions: `T | None`, never `Optional[T]`\n- Consumer Litestar app modules MAY use `from __future__ import annotations`\n- Async all I/O — handlers exposed via MCP must be `async def`\n\n## Quick Reference\n\n### Install\n\n```bash\npip install litestar-mcp\n```\n\n### Basic Setup\n\n```python\nfrom litestar import Litestar, get\nfrom litestar_mcp import LitestarMCP, MCPConfig\n\n@get(\"/users\", name=\"list_users\")\nasync def get_users() -> list[dict]: ...\n\napp = Litestar(\n    route_handlers=[get_users],\n    plugins=[LitestarMCP(MCPConfig(name=\"My API\"))],\n)\n```\n\nThe MCP endpoint is mounted at `POST /mcp/` by default.\n\n### MCPConfig\n\n| Option | Type | Default | Description |\n| --- | --- | --- | --- |\n| `name` | `str` | `\"litestar\"` | Server name reported in `initialize` response |\n| `base_path` | `str` | `\"/mcp\"` | URL prefix for the MCP controller |\n| `guards` | `list[Guard]` | `[]` | Litestar guards applied to the MCP controller |\n| `allowed_origins` | `list[str]` | `[\"*\"]` | CORS origins for the MCP endpoint |\n| `auth` | `OAuthConfig \\| None` | `None` | OAuth 2.1 configuration |\n| `include_operations` | `list[str] \\| None` | `None` | Whitelist of operation names to expose |\n| `exclude_operations` | `list[str] \\| None` | `None` | Blacklist of operation names to suppress |\n| `include_tags` | `list[str] \\| None` | `None` | Only expose routes with these OpenAPI tags |\n| `exclude_tags` | `list[str] \\| None` | `None` | Suppress routes with these OpenAPI tags |\n\n### Default Route Discovery\n\n| HTTP Method | Default MCP Type |\n| --- | --- |\n| `GET` | resource |\n| `POST` / `PUT` / `PATCH` / `DELETE` | tool |\n\nOverride per route with decorators (below).\n\n### `@mcp_tool` — explicit tool\n\n```python\nfrom litestar import post\nfrom litestar_mcp import mcp_tool\n\n@mcp_tool(\"create_order\")\n@post(\"/orders\")\nasync def create_order(data: OrderCreate) -> Order: ...\n```\n\nThe string argument sets the MCP tool name. Omit it to use the route's `name` attribute.\n\n### `@mcp_resource` — explicit resource\n\n```python\nfrom litestar import get\nfrom litestar_mcp import mcp_resource\n\n@mcp_resource(\"orders_list\")\n@get(\"/orders\", name=\"list_orders\")\nasync def list_orders() -> list[Order]: ...\n```\n\n### `opt` dict (no decorator import)\n\n```python\n@get(\"/internal/health\", opt={\"mcp_exclude\": True})\nasync def health_check() -> dict: ...\n\n@post(\"/orders\", opt={\"mcp_tool_name\": \"place_order\"})\nasync def create_order(data: OrderCreate) -> Order: ...\n```\n\n| `opt` key | Type | Description |\n| --- | --- | --- |\n| `mcp_exclude` | `bool` | Exclude this route from MCP entirely |\n| `mcp_tool_name` | `str` | Override MCP tool name |\n| `mcp_resource_name` | `str` | Override MCP resource name; implies resource type |\n\n### JSON-RPC Methods\n\n| Method | Description |\n| --- | --- |\n| `initialize` | Handshake; returns server name, version, capabilities |\n| `ping` | Health check; returns `pong` |\n| `resources/list` | List all discoverable MCP resources |\n| `resources/read` | Read (call) a specific resource by URI |\n| `tools/list` | List all discoverable MCP tools |\n| `tools/call` | Invoke a tool by name with arguments |\n\n### Example JSON-RPC Call\n\n```json\nPOST /mcp/\nContent-Type: application/json\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"create_order\",\n    \"arguments\": { \"product_id\": 42, \"quantity\": 3 }\n  }\n}\n```\n\nResponse:\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"result\": {\n    \"content\": [{ \"type\": \"text\", \"text\": \"{\\\"id\\\": 99, \\\"status\\\": \\\"pending\\\"}\" }]\n  }\n}\n```\n\n### Built-in OpenAPI Resource\n\n`LitestarMCP` automatically exposes the Litestar OpenAPI schema as an MCP resource:\n\n- **URI**: `openapi://schema`\n- **MIME type**: `application/json`\n- **Content**: Full OpenAPI 3.x schema from `/schema/openapi.json`\n\nAI agents read this resource to understand the full API surface before calling tools.\n\n### OAuth 2.1 Auth\n\n```python\nfrom litestar_mcp import MCPConfig, OAuthConfig\n\nconfig = MCPConfig(\n    name=\"My Secured API\",\n    auth=OAuthConfig(\n        issuer=\"https://auth.example.com\",\n        client_id=\"mcp-client\",\n        scopes=[\"read\", \"write\"],\n    ),\n)\n```\n\nPKCE is enforced. Token validation uses the issuer's JWKS endpoint.\n\n### Guard-based Auth (simpler)\n\n```python\nconfig = MCPConfig(\n    name=\"My API\",\n    guards=[requires_api_key],\n)\n```\n\n### Filtering\n\n```python\nconfig = MCPConfig(\n    name=\"Public API\",\n    include_tags=[\"public\"],\n    exclude_operations=[\"admin:delete_user\", \"admin:list_users\"],\n)\n```\n\n`include_operations` / `exclude_operations` match against route `name` attributes.\n\n<workflow>\n\n## Workflow\n\n### Step 1: Install\n\n```bash\npip install litestar-mcp\n```\n\n### Step 2: Decide What to Expose\n\nList the routes that should be callable by AI agents. Use OpenAPI tags to group them (e.g., `tags=[\"public\"]`). Routes that touch admin operations, internal metrics, or sensitive data should NOT be exposed.\n\n### Step 3: Add the Plugin\n\nWire `LitestarMCP(MCPConfig(name=...))` into `Litestar(plugins=[...])`. Set `include_tags` or `include_operations` to start with an explicit allowlist.\n\n### Step 4: Annotate Per-Route (optional)\n\nFor routes that need explicit MCP names or type overrides, use `@mcp_tool(\"name\")`, `@mcp_resource(\"name\")`, or `opt={\"mcp_tool_name\": \"...\"}`.\n\n### Step 5: Add Auth\n\nFor public-facing MCP endpoints, set `OAuthConfig`. For internal use, set `guards=[...]` with API-key or session-based guards.\n\n### Step 6: Verify\n\nHit `POST /mcp/` with a `tools/list` request. Confirm only intended routes appear. Hit `tools/call` for a sample mutation; confirm input validation works.\n\n</workflow>\n\n<guardrails>\n\n## Guardrails\n\n- **Default to allowlists, not blocklists** — `include_tags` is safer than `exclude_*`. Adding a new route shouldn't accidentally expose it to AI.\n- **Never expose admin / destructive routes by default** — use `opt={\"mcp_exclude\": True}` or filter by tag.\n- **Prefer resources for idempotent reads** — AI agents may call resources speculatively during reasoning. Tools have side effects; gate them behind explicit confirmation.\n- **Tool argument validation runs against the OpenAPI request schema** — keep DTOs precise; loose `dict[str, Any]` schemas let agents pass anything.\n- **Use `OAuthConfig` for public MCP endpoints** — JSON-RPC over HTTP is reachable from anywhere; raw API keys leak.\n- **Pin `base_path`** — default `/mcp` is fine but document if changed.\n- **Don't expose internal metrics, debug, or system routes** — `opt={\"mcp_exclude\": True}` or `exclude_tags=[\"internal\"]`.\n- **Guard the MCP controller with the same Guards as your normal API** if it shares user context.\n\n</guardrails>\n\n<validation>\n\n### Validation Checkpoint\n\nBefore delivering an MCP integration, verify:\n\n- [ ] `LitestarMCP` is in `app.plugins`\n- [ ] `MCPConfig.name` is meaningful (used in agent UIs)\n- [ ] An allowlist (`include_tags` or `include_operations`) is set, not a pure blocklist\n- [ ] Admin / internal routes are excluded\n- [ ] Auth is configured (`auth=OAuthConfig` or `guards=[...]`)\n- [ ] `POST /mcp/` `tools/list` returns only intended routes\n- [ ] All exposed handlers are `async def` and return JSON-serializable types\n- [ ] Tool arg schemas (DTOs) are precise — no loose `dict[str, Any]`\n\n</validation>\n\n<example>\n\n## Example\n\n**Task:** Expose product listing as a resource and \"add to cart\" as a tool. Hide internal metrics.\n\n```python\nfrom litestar import Litestar, get, post\nfrom litestar_mcp import LitestarMCP, MCPConfig, mcp_tool, mcp_resource\n\n@mcp_resource(\"product_list\")\n@get(\"/products\", name=\"list_products\", tags=[\"public\"])\nasync def list_products() -> list[dict]:\n    return [{\"id\": 1, \"name\": \"Widget\"}]\n\n@mcp_tool(\"add_to_cart\")\n@post(\"/cart/items\", name=\"cart:add\", tags=[\"public\"])\nasync def add_to_cart(data: CartItem) -> Cart: ...\n\n@get(\"/internal/metrics\", opt={\"mcp_exclude\": True})\nasync def metrics() -> dict: ...\n\napp = Litestar(\n    route_handlers=[list_products, add_to_cart, metrics],\n    plugins=[LitestarMCP(MCPConfig(\n        name=\"E-Commerce API\",\n        include_tags=[\"public\"],\n    ))],\n)\n```\n\n</example>\n\n---\n\n## Notes\n\n- `tools/call` arguments are validated against the route's OpenAPI request schema before dispatch.\n- Response content is serialized to JSON string and wrapped in MCP `TextContent`.\n- `LitestarMCP` does not affect normal HTTP routing — all existing endpoints continue to work unchanged.\n- Use `exclude_operations` or `opt={\"mcp_exclude\": True}` to keep internal/admin routes hidden from MCP clients.\n\n## Cross-References\n\n- **[litestar](../litestar/SKILL.md)** — Litestar app, Guards, OpenAPI, plugin lifecycle.\n\n## Official References\n\n- <https://github.com/litestar-org/litestar-mcp>\n- <https://modelcontextprotocol.io/>\n- <https://spec.modelcontextprotocol.io/>\n\n## Shared Styleguide Baseline\n\n- [General Principles](../litestar-styleguide/references/general.md)\n- [Python](../litestar-styleguide/references/python.md)\n- [Litestar](../litestar-styleguide/references/litestar.md)","tags":["litestar","mcp","skills","litestar-org","advanced-alchemy","agent-skills","agentskills","ai-agents","claude-code-plugin","claude-code-skills","gemini-cli-extension","htmx"],"capabilities":["skill","source-litestar-org","skill-litestar-mcp","topic-advanced-alchemy","topic-agent-skills","topic-agentskills","topic-ai-agents","topic-claude-code-plugin","topic-claude-code-skills","topic-gemini-cli-extension","topic-htmx","topic-inertia","topic-litestar","topic-mcp","topic-python"],"categories":["litestar-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/litestar-org/litestar-skills/litestar-mcp","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add litestar-org/litestar-skills","source_repo":"https://github.com/litestar-org/litestar-skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (9,454 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:54.218Z","embedding":null,"createdAt":"2026-05-18T13:20:57.888Z","updatedAt":"2026-05-18T19:13:54.218Z","lastSeenAt":"2026-05-18T19:13:54.218Z","tsv":"'/)':63 '/cart/items':1109 '/internal/health':403 '/internal/metrics':1124 '/litestar-org/litestar-mcp':1225 '/litestar-styleguide/references/general.md':1233 '/litestar-styleguide/references/litestar.md':1237 '/litestar-styleguide/references/python.md':1235 '/litestar/skill.md':1214 '/mcp':86,197,217,513,806,931,1017 '/orders':341,386,414 '/products':1086 '/schema/openapi.json':577 '/users':168 '1':521,539,675,1100 '2':684 '2.0':71,519,537 '2.1':249,593 '3':533,573,723 '4':747 '42':531 '5':776 '6':802 '604':116 '99':546 'accident':844 'activ':6 'ad':838 'add':724,777,1055,1105,1112,1117,1139 'admin':658,661,711,851,1004 'affect':1183 'agent':579,698,871,905,989 'ai':578,697,848,870 'allow':234 'allowlist':745,829,992 'annot':132,748 'anyth':907 'anywher':922 'api':189,587,607,641,644,652,794,924,966,1150 'api-key':793 'app':125,178,1133,1216 'app.plugins':983 'appear':815 'appli':229 'application/json':517,569 'arg':1036 'argument':351,505,528,888,1156 'async':133,142,172,342,390,408,421,1027,1092,1115,1129 'attribut':365,672 'auth':244,594,608,634,778,1009,1012 'auth.example.com':611 'auto':5 'auto-activ':4 'automat':555 'base':214,633,799,928 'baselin':1230 'bash':147,677 'basic':153 'becom':90,97 'behind':884 'blacklist':269 'blocklist':831,1003 'bool':434 'built':550 'built-in':549 'call':486,510,590,873 'callabl':695 'capabl':472 'cart':1057,1107,1111,1119,1122,1141 'cartitem':1121 'chang':937 'check':411,475 'checkpoint':973 'client':612,616,1209 'code':112 'commerc':1149 'config':602,637,648 'configur':87,250,1011 'confirm':811,822,886 'consum':123 'content':515,541,570,1169 'content-typ':514 'context':58,971 'continu':1190 'control':223,233,958 'cor':238 'creat':338,344,423,526 'cross':1211 'cross-refer':1210 'data':346,425,717,1120 'debug':943 'decid':685 'decor':319,399 'def':143,173,343,391,409,422,1028,1093,1116,1130 'default':199,203,300,305,827,855,930 'delet':313,659 'deliv':975 'descript':204,431,465 'destruct':852 'dict':111,177,397,412,900,1043,1097,1132 'discov':74 'discover':481,495 'discoveri':302 'dispatch':1167 'document':935 'dtos':897,1038 'e':1148 'e-commerc':1147 'e.g':705 'effect':881 'endpoint':28,192,243,630,784,913,1189 'enforc':622 'entir':440 'exampl':506,1046 'exclud':263,288,406,433,435,656,666,837,859,949,952,1008,1127,1195,1200 'exist':1188 'explicit':323,368,744,757,885 'expos':31,52,137,262,282,556,688,721,845,850,940,1024,1048 'exposur':22 'face':782 'filter':24,646,862 'fine':933 'full':571,586 'futur':130 'gate':882 'general':1231 'get':88,160,167,174,182,308,374,385,402,1069,1085,1123 'github.com':1224 'github.com/litestar-org/litestar-mcp':1223 'group':703 'guard':224,226,228,632,642,791,800,955,962,1015,1217 'guard-bas':631 'guardrail':826 'handler':55,89,96,136,181,1025,1136 'handshak':467 'health':410,474 'hidden':1206 'hide':1061 'hit':804,816 'http':303,918,1185 'i/o':135 'id':520,530,538,545,613,1099 'idempot':868 'impli':457 'import':10,131,158,164,328,333,373,378,400,599,1067,1074 'includ':251,275,653,664,735,738,832,993,996,1151 'initi':212,466 'input':823 'instal':146,149,676,679 'integr':978 'intend':813,1021 'intern':713,788,941,954,1005,1062 'internal/admin':1204 'invok':499 'issuer':610,627 'json':19,69,461,508,511,535,915,1032,1173 'json-rpc':18,68,460,507,914 'json-serializ':1031 'jsonrpc':518,536 'jwks':629 'keep':896,1203 'key':429,645,795,925 'leak':926 'let':904 'lifecycl':1220 'list':170,176,225,236,253,265,277,290,384,388,392,394,479,493,662,689,1050,1084,1088,1094,1096,1137 'litestar':2,8,32,43,47,50,53,78,124,151,157,159,162,179,207,227,327,331,372,376,558,597,681,732,1066,1068,1072,1134,1213,1215,1236 'litestar-mcp':1,46,49,150,680 'litestarmcp':11,165,185,554,728,980,1075,1144,1180 'loos':899,1042 'match':668 'may':127,872 'mcp':3,9,14,16,27,35,44,48,51,60,105,107,139,152,163,191,222,232,242,306,321,332,334,336,354,366,377,379,381,405,416,432,439,441,446,449,454,482,496,563,598,615,682,758,764,767,772,783,858,912,948,957,977,1073,1077,1079,1081,1103,1126,1178,1199,1208 'mcp-client':614 'mcpconfig':12,166,186,200,600,603,638,649,729,1076,1145 'mcpconfig.name':984 'mcpcontrol':13 'meaning':986 'method':304,463,464,522 'metric':714,942,1063,1131,1142 'mime':567 'model':57 'modelcontextprotocol.io':62,1226 'modelcontextprotocol.io/)':61 'modul':126 'mount':194 'must':140 'mutat':99,821 'name':169,187,205,209,260,272,356,364,387,418,443,448,451,456,470,503,525,604,639,650,671,730,759,766,769,774,1087,1101,1110,1146 'need':756 'never':120,849 'new':840 'non':42 'non-litestar':41 'none':119,246,247,255,256,267,268,279,280,292,293 'normal':965,1184 'note':1154 'oauth':248,592 'oauth/guard-protected':26 'oauthconfig':245,601,609,786,909,1013 'offici':1221 'omit':357 'openapi':79,286,298,552,559,572,700,893,1163,1218 'oper':252,259,264,271,657,665,667,712,739,997,1196 'opt':110,396,404,415,428,771,857,947,1125,1198 'option':121,201,752 'order':339,345,348,383,389,393,395,420,424,427,527 'ordercr':347,426 'origin':235,239 'overrid':103,315,445,453,762 'param':524 'pass':906 'patch':312 'path':215,929 'pend':548 'pep':115 'per':101,316,750 'per-rout':100,749 'pin':927 'ping':473 'pip':148,678 'pkce':620 'place':419 'plugin':73,184,726,733,1143,1219 'pong':477 'post':85,196,310,329,340,413,512,805,1016,1070,1108 'post/put/patch/delete':95 'precis':898,1040 'prefer':865 'prefix':219 'principl':1232 'product':529,1049,1083,1089,1095,1138 'protocol':59 'public':651,655,707,781,911,1091,1114,1153 'public-fac':780 'pure':1002 'put':311 'python':155,325,370,401,595,636,647,1064,1234 'quantiti':532 'quick':144 'raw':923 'reachabl':920 'read':93,485,580,618,869 'read-on':92 'reason':877 'refer':145,1212,1222 'report':210 'request':810,894,1164 'requir':643 'resourc':17,38,66,91,108,309,367,369,380,382,450,455,458,483,489,553,564,582,768,866,874,1053,1080,1082 'resources/list':478 'resources/read':484 'respons':213,534,1168 'result':540 'return':468,476,1019,1030,1098 'rout':21,23,33,54,75,102,180,283,295,301,317,362,437,670,691,708,751,754,814,841,853,946,1006,1022,1135,1161,1186,1205 'rpc':20,70,462,509,916 'rule':114 'run':890 'safer':835 'sampl':820 'schema':80,560,566,575,895,903,1037,1165 'scope':617 'secur':606 'sensit':716 'serial':1171 'serializ':1033 'serv':82 'server':45,208,469 'session':798 'session-bas':797 'set':352,734,785,790,999 'setup':154 'share':969,1228 'shouldn':842 'side':880 'simpler':635 'skill' 'skill-litestar-mcp' 'source-litestar-org' 'spec.modelcontextprotocol.io':1227 'specif':488 'specul':875 'start':741 'status':547 'step':674,683,722,746,775,801 'str':206,216,237,254,266,278,291,444,452,901,1044 'string':350,1174 'style':113 'styleguid':1229 'suppress':274,294 'surfac':588 'system':945 'tag':276,287,289,299,654,701,706,736,833,864,953,994,1090,1113,1152 'task':1047 'text':543,544 'textcont':1179 'token':623 'tool':15,36,64,98,106,314,322,324,335,337,355,417,442,447,497,501,591,765,773,878,887,1035,1060,1078,1104 'tools/call':498,523,817,1155 'tools/list':492,809,1018 'topic-advanced-alchemy' 'topic-agent-skills' 'topic-agentskills' 'topic-ai-agents' 'topic-claude-code-plugin' 'topic-claude-code-skills' 'topic-gemini-cli-extension' 'topic-htmx' 'topic-inertia' 'topic-litestar' 'topic-mcp' 'topic-python' 'touch':710 'true':407,860,950,1128,1201 'type':202,307,430,459,516,542,568,761,1034 'ui':990 'unchang':1193 'understand':584 'union':117 'uri':491,565 'url':218 'use':29,128,360,625,699,763,789,856,908,987,1194 'user':171,175,183,660,663,970 'valid':624,824,889,972,1158 'verifi':803,979 'version':471 'via':76,104,138 'whitelist':257 'widget':1102 'wire':727 'work':825,1192 'workflow':673 'wrap':1176 'write':619 'x':574","prices":[{"id":"75e0c874-10db-4182-a53f-720041f9ceab","listingId":"2bd0639b-c8bd-4dbb-b198-4baf0441cfea","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"litestar-org","category":"litestar-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:57.888Z"}],"sources":[{"listingId":"2bd0639b-c8bd-4dbb-b198-4baf0441cfea","source":"github","sourceId":"litestar-org/litestar-skills/litestar-mcp","sourceUrl":"https://github.com/litestar-org/litestar-skills/tree/main/skills/litestar-mcp","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:57.888Z","lastSeenAt":"2026-05-18T19:13:54.218Z"}],"details":{"listingId":"2bd0639b-c8bd-4dbb-b198-4baf0441cfea","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"litestar-org","slug":"litestar-mcp","github":{"repo":"litestar-org/litestar-skills","stars":7,"topics":["advanced-alchemy","agent-skills","agentskills","ai-agents","claude-code-plugin","claude-code-skills","gemini-cli-extension","htmx","inertia","litestar","mcp","python","sqlspec"],"license":"mit","html_url":"https://github.com/litestar-org/litestar-skills","pushed_at":"2026-05-13T16:04:09Z","description":"Opinionated first-party agent skills, plugins, subagents, slash commands, and MCP servers for the Litestar framework ecosystem — publishable to Claude Code, Gemini CLI, Codex CLI, Cursor, OpenCode, and VS Code/Copilot from a single repo.","skill_md_sha":"5d245b94a96e09179fd4b89c55d2903b4418b68c","skill_md_path":"skills/litestar-mcp/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/litestar-org/litestar-skills/tree/main/skills/litestar-mcp"},"layout":"multi","source":"github","category":"litestar-skills","frontmatter":{"name":"litestar-mcp","description":"Auto-activate for litestar_mcp imports, LitestarMCP, MCPConfig, MCPController, @mcp_tool, @mcp_resource, JSON-RPC route exposure, route filtering, or OAuth/Guard-protected MCP endpoints. Use when exposing Litestar routes as MCP tools or resources. Not for non-Litestar MCP servers or FastAPI/Django MCP integrations."},"skills_sh_url":"https://skills.sh/litestar-org/litestar-skills/litestar-mcp"},"updatedAt":"2026-05-18T19:13:54.218Z"}}