{"id":"f3232444-39a6-4300-96c6-9493133e62f3","shortId":"kpbg4L","kind":"skill","title":"rust-mcp-server-generator","tagline":"Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK","description":"# Rust MCP Server Generator\n\nYou are a Rust MCP server generator. Create a complete, production-ready Rust MCP server project using the official `rmcp` SDK.\n\n## Project Requirements\n\nAsk the user for:\n1. **Project name** (e.g., \"my-mcp-server\")\n2. **Server description** (e.g., \"A weather data MCP server\")\n3. **Transport type** (stdio, sse, http, or all)\n4. **Tools to include** (e.g., \"weather lookup\", \"forecast\", \"alerts\")\n5. **Whether to include prompts and resources**\n\n## Project Structure\n\nGenerate this structure:\n\n```\n{project-name}/\n├── Cargo.toml\n├── .gitignore\n├── README.md\n├── src/\n│   ├── main.rs\n│   ├── handler.rs\n│   ├── tools/\n│   │   ├── mod.rs\n│   │   └── {tool_name}.rs\n│   ├── prompts/\n│   │   ├── mod.rs\n│   │   └── {prompt_name}.rs\n│   ├── resources/\n│   │   ├── mod.rs\n│   │   └── {resource_name}.rs\n│   └── state.rs\n└── tests/\n    └── integration_test.rs\n```\n\n## File Templates\n\n### Cargo.toml\n\n```toml\n[package]\nname = \"{project-name}\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nrmcp = { version = \"0.8.1\", features = [\"server\"] }\nrmcp-macros = \"0.8\"\ntokio = { version = \"1\", features = [\"full\"] }\nserde = { version = \"1.0\", features = [\"derive\"] }\nserde_json = \"1.0\"\nanyhow = \"1.0\"\ntracing = \"0.1\"\ntracing-subscriber = \"0.3\"\nschemars = { version = \"0.8\", features = [\"derive\"] }\nasync-trait = \"0.1\"\n\n# Optional: for HTTP transports\naxum = { version = \"0.7\", optional = true }\ntower-http = { version = \"0.5\", features = [\"cors\"], optional = true }\n\n[dev-dependencies]\ntokio-test = \"0.4\"\n\n[features]\ndefault = []\nhttp = [\"dep:axum\", \"dep:tower-http\"]\n\n[[bin]]\nname = \"{project-name}\"\npath = \"src/main.rs\"\n```\n\n### .gitignore\n\n```gitignore\n/target\nCargo.lock\n*.swp\n*.swo\n*~\n.DS_Store\n```\n\n### README.md\n\n```markdown\n# {Project Name}\n\n{Server description}\n\n## Installation\n\n```bash\ncargo build --release\n```\n\n## Usage\n\n### Stdio Transport\n\n```bash\ncargo run\n```\n\n### SSE Transport\n\n```bash\ncargo run --features http -- --transport sse\n```\n\n### HTTP Transport\n\n```bash\ncargo run --features http -- --transport http\n```\n\n## Configuration\n\nConfigure in your MCP client (e.g., Claude Desktop):\n\n```json\n{\n  \"mcpServers\": {\n    \"{project-name}\": {\n      \"command\": \"path/to/target/release/{project-name}\",\n      \"args\": []\n    }\n  }\n}\n```\n\n## Tools\n\n- **{tool_name}**: {Tool description}\n\n## Development\n\nRun tests:\n\n```bash\ncargo test\n```\n\nRun with logging:\n\n```bash\nRUST_LOG=debug cargo run\n```\n```\n\n### src/main.rs\n\n```rust\nuse anyhow::Result;\nuse rmcp::{\n    protocol::ServerCapabilities,\n    server::Server,\n    transport::StdioTransport,\n};\nuse tokio::signal;\nuse tracing_subscriber;\n\nmod handler;\nmod state;\nmod tools;\nmod prompts;\nmod resources;\n\nuse handler::McpHandler;\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n    // Initialize tracing\n    tracing_subscriber::fmt()\n        .with_max_level(tracing::Level::INFO)\n        .with_target(false)\n        .init();\n    \n    tracing::info!(\"Starting {project-name} MCP server\");\n    \n    // Create handler\n    let handler = McpHandler::new();\n    \n    // Create transport (stdio by default)\n    let transport = StdioTransport::new();\n    \n    // Build server with capabilities\n    let server = Server::builder()\n        .with_handler(handler)\n        .with_capabilities(ServerCapabilities {\n            tools: Some(Default::default()),\n            prompts: Some(Default::default()),\n            resources: Some(Default::default()),\n            ..Default::default()\n        })\n        .build(transport)?;\n    \n    tracing::info!(\"Server started, waiting for requests\");\n    \n    // Run server until Ctrl+C\n    server.run(signal::ctrl_c()).await?;\n    \n    tracing::info!(\"Server shutting down\");\n    Ok(())\n}\n```\n\n### src/handler.rs\n\n```rust\nuse rmcp::{\n    model::*,\n    protocol::*,\n    server::{RequestContext, ServerHandler, RoleServer, ToolRouter},\n    ErrorData,\n};\nuse rmcp::{tool_router, tool_handler};\nuse async_trait::async_trait;\n\nuse crate::state::ServerState;\nuse crate::tools;\n\npub struct McpHandler {\n    state: ServerState,\n    tool_router: ToolRouter,\n}\n\n#[tool_router]\nimpl McpHandler {\n    // Include tool definitions from tools module\n    #[tool(\n        name = \"example_tool\",\n        description = \"An example tool\",\n        annotations(read_only_hint = true)\n    )]\n    async fn example_tool(params: Parameters<tools::ExampleParams>) -> Result<String, String> {\n        tools::example::execute(params).await\n    }\n    \n    pub fn new() -> Self {\n        Self {\n            state: ServerState::new(),\n            tool_router: Self::tool_router(),\n        }\n    }\n}\n\n#[tool_handler]\n#[async_trait]\nimpl ServerHandler for McpHandler {\n    async fn list_prompts(\n        &self,\n        _request: Option<PaginatedRequestParam>,\n        _context: RequestContext<RoleServer>,\n    ) -> Result<ListPromptsResult, ErrorData> {\n        let prompts = vec![\n            Prompt {\n                name: \"example-prompt\".to_string(),\n                description: Some(\"An example prompt\".to_string()),\n                arguments: Some(vec![\n                    PromptArgument {\n                        name: \"topic\".to_string(),\n                        description: Some(\"The topic to discuss\".to_string()),\n                        required: Some(true),\n                    },\n                ]),\n            },\n        ];\n        \n        Ok(ListPromptsResult { prompts })\n    }\n    \n    async fn get_prompt(\n        &self,\n        request: GetPromptRequestParam,\n        _context: RequestContext<RoleServer>,\n    ) -> Result<GetPromptResult, ErrorData> {\n        match request.name.as_str() {\n            \"example-prompt\" => {\n                let topic = request.arguments\n                    .as_ref()\n                    .and_then(|args| args.get(\"topic\"))\n                    .ok_or_else(|| ErrorData::invalid_params(\"topic required\"))?;\n                \n                Ok(GetPromptResult {\n                    description: Some(\"Example prompt\".to_string()),\n                    messages: vec![\n                        PromptMessage::user(format!(\"Let's discuss: {}\", topic)),\n                    ],\n                })\n            }\n            _ => Err(ErrorData::invalid_params(\"Unknown prompt\")),\n        }\n    }\n    \n    async fn list_resources(\n        &self,\n        _request: Option<PaginatedRequestParam>,\n        _context: RequestContext<RoleServer>,\n    ) -> Result<ListResourcesResult, ErrorData> {\n        let resources = vec![\n            Resource {\n                uri: \"example://data/info\".to_string(),\n                name: \"Example Resource\".to_string(),\n                description: Some(\"An example resource\".to_string()),\n                mime_type: Some(\"text/plain\".to_string()),\n            },\n        ];\n        \n        Ok(ListResourcesResult { resources })\n    }\n    \n    async fn read_resource(\n        &self,\n        request: ReadResourceRequestParam,\n        _context: RequestContext<RoleServer>,\n    ) -> Result<ReadResourceResult, ErrorData> {\n        match request.uri.as_str() {\n            \"example://data/info\" => {\n                Ok(ReadResourceResult {\n                    contents: vec![\n                        ResourceContents::text(\"Example resource content\".to_string())\n                            .with_uri(request.uri)\n                            .with_mime_type(\"text/plain\"),\n                    ],\n                })\n            }\n            _ => Err(ErrorData::invalid_params(\"Unknown resource\")),\n        }\n    }\n}\n```\n\n### src/state.rs\n\n```rust\nuse std::sync::Arc;\nuse tokio::sync::RwLock;\n\n#[derive(Clone)]\npub struct ServerState {\n    // Add shared state here\n    counter: Arc<RwLock<i32>>,\n}\n\nimpl ServerState {\n    pub fn new() -> Self {\n        Self {\n            counter: Arc::new(RwLock::new(0)),\n        }\n    }\n    \n    pub async fn increment(&self) -> i32 {\n        let mut counter = self.counter.write().await;\n        *counter += 1;\n        *counter\n    }\n    \n    pub async fn get(&self) -> i32 {\n        *self.counter.read().await\n    }\n}\n```\n\n### src/tools/mod.rs\n\n```rust\npub mod example;\n\npub use example::ExampleParams;\n```\n\n### src/tools/example.rs\n\n```rust\nuse rmcp::model::Parameters;\nuse serde::{Deserialize, Serialize};\nuse schemars::JsonSchema;\n\n#[derive(Debug, Deserialize, JsonSchema)]\npub struct ExampleParams {\n    pub input: String,\n}\n\npub async fn execute(params: Parameters<ExampleParams>) -> Result<String, String> {\n    let input = &params.inner().input;\n    \n    // Tool logic here\n    Ok(format!(\"Processed: {}\", input))\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    \n    #[tokio::test]\n    async fn test_example_tool() {\n        let params = Parameters::new(ExampleParams {\n            input: \"test\".to_string(),\n        });\n        \n        let result = execute(params).await.unwrap();\n        assert!(result.contains(\"test\"));\n    }\n}\n```\n\n### src/prompts/mod.rs\n\n```rust\n// Prompt implementations can go here if needed\n```\n\n### src/resources/mod.rs\n\n```rust\n// Resource implementations can go here if needed\n```\n\n### tests/integration_test.rs\n\n```rust\nuse rmcp::{\n    model::*,\n    protocol::*,\n    server::{RequestContext, ServerHandler, RoleServer},\n};\n\n// Replace with your actual project name in snake_case\n// Example: if project is \"my-mcp-server\", use my_mcp_server\nuse my_mcp_server::handler::McpHandler;\n\n#[tokio::test]\nasync fn test_list_tools() {\n    let handler = McpHandler::new();\n    let context = RequestContext::default();\n    \n    let result = handler.list_tools(None, context).await.unwrap();\n    \n    assert!(!result.tools.is_empty());\n    assert!(result.tools.iter().any(|t| t.name == \"example_tool\"));\n}\n\n#[tokio::test]\nasync fn test_call_tool() {\n    let handler = McpHandler::new();\n    let context = RequestContext::default();\n    \n    let request = CallToolRequestParam {\n        name: \"example_tool\".to_string(),\n        arguments: Some(serde_json::json!({\n            \"input\": \"test\"\n        })),\n    };\n    \n    let result = handler.call_tool(request, context).await;\n    assert!(result.is_ok());\n}\n\n#[tokio::test]\nasync fn test_list_prompts() {\n    let handler = McpHandler::new();\n    let context = RequestContext::default();\n    \n    let result = handler.list_prompts(None, context).await.unwrap();\n    assert!(!result.prompts.is_empty());\n}\n\n#[tokio::test]\nasync fn test_list_resources() {\n    let handler = McpHandler::new();\n    let context = RequestContext::default();\n    \n    let result = handler.list_resources(None, context).await.unwrap();\n    assert!(!result.resources.is_empty());\n}\n```\n\n## Implementation Guidelines\n\n1. **Use rmcp-macros**: Leverage `#[tool]`, `#[tool_router]`, and `#[tool_handler]` macros for cleaner code\n2. **Type Safety**: Use `schemars::JsonSchema` for all parameter types\n3. **Error Handling**: Return `Result` types with proper error messages\n4. **Async/Await**: All handlers must be async\n5. **State Management**: Use `Arc<RwLock<T>>` for shared state\n6. **Testing**: Include unit tests for tools and integration tests for handlers\n7. **Logging**: Use `tracing` macros (`info!`, `debug!`, `warn!`, `error!`)\n8. **Documentation**: Add doc comments to all public items\n\n## Example Tool Patterns\n\n### Simple Read-Only Tool\n\n```rust\n#[derive(Debug, Deserialize, JsonSchema)]\npub struct GreetParams {\n    pub name: String,\n}\n\n#[tool(\n    name = \"greet\",\n    description = \"Greets a user by name\",\n    annotations(read_only_hint = true, idempotent_hint = true)\n)]\nasync fn greet(params: Parameters<GreetParams>) -> String {\n    format!(\"Hello, {}!\", params.inner().name)\n}\n```\n\n### Tool with Error Handling\n\n```rust\n#[derive(Debug, Deserialize, JsonSchema)]\npub struct DivideParams {\n    pub a: f64,\n    pub b: f64,\n}\n\n#[tool(name = \"divide\", description = \"Divides two numbers\")]\nasync fn divide(params: Parameters<DivideParams>) -> Result<f64, String> {\n    let p = params.inner();\n    if p.b == 0.0 {\n        Err(\"Cannot divide by zero\".to_string())\n    } else {\n        Ok(p.a / p.b)\n    }\n}\n```\n\n### Tool with State\n\n```rust\n#[tool(\n    name = \"increment\",\n    description = \"Increments the counter\",\n    annotations(destructive_hint = true)\n)]\nasync fn increment(state: &ServerState) -> i32 {\n    state.increment().await\n}\n```\n\n## Running the Generated Server\n\nAfter generation:\n\n```bash\ncd {project-name}\ncargo build\ncargo test\ncargo run\n```\n\nFor Claude Desktop integration:\n\n```json\n{\n  \"mcpServers\": {\n    \"{project-name}\": {\n      \"command\": \"path/to/{project-name}/target/release/{project-name}\",\n      \"args\": []\n    }\n  }\n}\n```\n\nNow generate the complete project based on the user's requirements!","tags":["rust","mcp","server","generator","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest"],"capabilities":["skill","source-github","skill-rust-mcp-server-generator","topic-agent-skills","topic-agents","topic-awesome","topic-custom-agents","topic-github-copilot","topic-hacktoberfest","topic-prompt-engineering"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/rust-mcp-server-generator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add github/awesome-copilot","source_repo":"https://github.com/github/awesome-copilot","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 33270 github stars · SKILL.md body (12,568 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-18T18:52:24.637Z","embedding":null,"createdAt":"2026-04-18T20:25:50.507Z","updatedAt":"2026-05-18T18:52:24.637Z","lastSeenAt":"2026-05-18T18:52:24.637Z","tsv":"'/target':227 '/target/release':1274 '0':758 '0.0':1208 '0.1':170,183 '0.1.0':141 '0.3':174 '0.4':208 '0.5':197 '0.7':190 '0.8':153,177 '0.8.1':147 '1':58,156,771,1042 '1.0':161,166,168 '2':66,1058 '2021':143 '3':75,1068 '4':83,1078 '5':92,1085 '6':1094 '7':1106 '8':1115 'actual':894 'add':739,1117 'alert':91 'annot':493,1152,1231 'anyhow':167,311 'arc':729,744,754,1089 'arg':287,609,1278 'args.get':610 'argument':562,973 'ask':54 'assert':860,940,943,987,1012,1037 'async':181,342,456,458,498,527,533,584,643,684,760,774,814,841,920,952,992,1017,1084,1160,1195,1235 'async-trait':180 'async/await':1079 'await':430,511,769,780,986,1242 'await.unwrap':859,939,1011,1036 'axum':188,213 'b':1186 'base':1284 'bash':240,247,252,261,296,302,1249 'bin':218 'build':242,384,412,1255 'builder':391 'c':425,429 'call':955 'calltoolrequestparam':967 'cannot':1210 'capabl':387,396 'cargo':241,248,253,262,297,306,1254,1256,1258 'cargo.lock':228 'cargo.toml':107,133 'case':899 'cd':1250 'cfg':833 'claud':275,1261 'cleaner':1056 'client':273 'clone':735 'code':1057 'command':282,1269 'comment':1119 'complet':8,39,1282 'configur':268,269 'content':702,708 'context':11,540,591,650,691,930,938,962,985,1002,1010,1027,1035 'cor':199 'counter':743,753,767,770,772,1230 'crate':461,465 'creat':37,369,375 'ctrl':424,428 'data':72 'data/info':660,699 'debug':305,804,1112,1134,1176 'default':210,379,400,401,404,405,408,409,410,411,932,964,1004,1029 'definit':481 'dep':212,214 'depend':144,204 'deriv':163,179,734,803,1133,1175 'descript':68,238,292,489,555,570,622,668,1146,1191,1227 'deseri':798,805,1135,1177 'desktop':276,1262 'destruct':1232 'dev':203 'dev-depend':202 'develop':293 'discuss':575,635 'divid':1190,1192,1197,1211 'divideparam':1181 'doc':1118 'document':1116 'ds':231 'e.g':61,69,87,274 'edit':142 'els':614,1216 'empti':942,1014,1039 'err':637,718,1209 'error':1069,1076,1114,1172 'errordata':448,544,595,615,638,654,695,719 'exampl':487,491,500,508,551,558,600,624,664,671,706,785,788,844,900,948,969,1124 'example-prompt':550,599 'exampleparam':789,809,850 'execut':509,816,857 'f64':1184,1187,1201 'fals':359 'featur':148,157,162,178,198,209,255,264 'file':131 'fmt':350 'fn':343,499,513,534,585,644,685,749,761,775,815,842,921,953,993,1018,1161,1196,1236 'forecast':90 'format':632,830,1166 'full':158 'generat':5,6,29,36,101,1245,1248,1280 'get':586,776 'getpromptrequestparam':590 'getpromptresult':594,621 'gitignor':108,225,226 'go':868,877 'greet':1145,1147,1162 'greetparam':1139 'guidelin':1041 'handl':1070,1173 'handler':328,338,370,372,393,394,454,526,916,926,958,998,1023,1053,1081,1105 'handler.call':982 'handler.list':935,1007,1032 'handler.rs':112 'hello':1167 'hint':496,1155,1158,1233 'http':80,186,195,211,217,256,259,265,267 'i32':764,778,1240 'idempot':1157 'impl':477,529,746 'implement':866,875,1040 'includ':86,95,479,1096 'increment':762,1226,1228,1237 'info':356,362,415,432,1111 'init':360 'initi':346 'input':811,823,825,832,851,978 'instal':239 'integr':1102,1263 'integration_test.rs':130 'invalid':616,639,720 'item':1123 'json':165,277,976,977,1264 'jsonschema':802,806,1063,1136,1178 'let':371,380,388,545,602,633,655,765,822,846,855,925,929,933,957,961,965,980,997,1001,1005,1022,1026,1030,1203 'level':353,355 'leverag':1047 'list':535,645,923,995,1020 'listpromptsresult':543,582 'listresourcesresult':653,682 'log':301,304,1107 'logic':827 'lookup':89 'macro':152,1046,1054,1110 'main':341,344 'main.rs':111 'manag':1087 'markdown':234 'match':596,696 'max':352 'mcp':3,27,34,44,64,73,272,367,906,910,914 'mcphandler':339,373,469,478,532,917,927,959,999,1024 'mcpserver':278,1265 'messag':628,1077 'mime':675,715 'mod':327,329,331,333,335,784,835 'mod.rs':114,119,124 'model':10,441,794,885 'modul':484 'must':1082 'mut':766 'my-mcp-serv':62,904 'name':60,106,116,121,126,136,139,219,222,236,281,286,290,366,486,549,566,663,896,968,1141,1144,1151,1169,1189,1225,1253,1268,1273,1277 'need':871,880 'new':374,383,514,519,750,755,757,849,928,960,1000,1025 'none':937,1009,1034 'number':1194 'offici':23,49 'ok':436,581,612,620,681,700,829,989,1217 'option':184,191,200,539,649 'p':1204 'p.a':1218 'p.b':1207,1219 'packag':135 'param':502,510,617,640,721,817,847,858,1163,1198 'paramet':503,795,818,848,1066,1164,1199 'params.inner':824,1168,1205 'path':223 'path/to':1270 'path/to/target/release':283 'pattern':1126 'process':831 'product':41 'production-readi':40 'project':14,46,52,59,99,105,138,221,235,280,285,365,895,902,1252,1267,1272,1276,1283 'project-nam':104,137,220,279,284,364,1251,1266,1271,1275 'prompt':17,96,118,120,334,402,536,546,548,552,559,583,587,601,625,642,865,996,1008 'promptargu':565 'promptmessag':630 'proper':1075 'protocol':12,315,442,886 'pub':467,512,736,748,759,773,783,786,807,810,813,1137,1140,1179,1182,1185 'public':1122 'read':494,686,1129,1153 'read-on':1128 'readi':42 'readme.md':109,233 'readresourcerequestparam':690 'readresourceresult':694,701 'ref':606 'releas':243 'replac':891 'request':420,538,589,648,689,966,984 'request.arguments':604 'request.name.as':597 'request.uri':713 'request.uri.as':697 'requestcontext':444,541,592,651,692,888,931,963,1003,1028 'requir':53,578,619,1289 'resourc':18,98,123,125,336,406,646,656,658,665,672,683,687,707,723,874,1021,1033 'resourcecont':704 'result':312,345,504,542,593,652,693,819,856,934,981,1006,1031,1072,1200 'result.contains':861 'result.is':988 'result.prompts.is':1013 'result.resources.is':1038 'result.tools.is':941 'result.tools.iter':944 'return':1071 'rmcp':24,50,145,151,314,440,450,793,884,1045 'rmcp-macro':150,1044 'roleserv':446,890 'router':452,473,476,521,524,1050 'rs':117,122,127 'run':249,254,263,294,299,307,421,1243,1259 'rust':2,9,26,33,43,303,309,438,725,782,791,864,873,882,1132,1174,1223 'rust-mcp-server-gener':1 'rwlock':733,745,756,1090 'safeti':1060 'schemar':175,801,1062 'sdk':25,51 'self':515,516,522,537,588,647,688,751,752,763,777 'self.counter.read':779 'self.counter.write':768 'serd':159,164,797,975 'serial':799 'server':4,13,28,35,45,65,67,74,149,237,317,318,368,385,389,390,416,422,433,443,887,907,911,915,1246 'server.run':426 'servercap':316,397 'serverhandl':445,530,889 'serverst':463,471,518,738,747,1239 'share':740,1092 'shut':434 'signal':323,427 'simpl':1127 'skill' 'skill-rust-mcp-server-generator' 'snake':898 'source-github' 'src':110 'src/handler.rs':437 'src/main.rs':224,308 'src/prompts/mod.rs':863 'src/resources/mod.rs':872 'src/state.rs':724 'src/tools/example.rs':790 'src/tools/mod.rs':781 'sse':79,250,258 'start':363,417 'state':330,462,470,517,741,1086,1093,1222,1238 'state.increment':1241 'state.rs':128 'std':727 'stdio':78,245,377 'stdiotransport':320,382 'store':232 'str':598,698 'string':505,506,554,561,569,577,627,662,667,674,680,710,812,820,821,854,972,1142,1165,1202,1215 'struct':468,737,808,1138,1180 'structur':100,103 'subscrib':173,326,349 'super':838 'swo':230 'swp':229 'sync':728,732 't.name':947 'target':358 'templat':132 'test':20,129,207,295,298,834,836,840,843,852,862,919,922,951,954,979,991,994,1016,1019,1095,1098,1103,1257 'tests/integration_test.rs':881 'text':705 'text/plain':678,717 'tokio':154,206,322,340,731,839,918,950,990,1015 'tokio-test':205 'toml':134 'tool':16,84,113,115,288,289,291,332,398,451,453,466,472,475,480,483,485,488,492,501,507,520,523,525,826,845,924,936,949,956,970,983,1048,1049,1052,1100,1125,1131,1143,1170,1188,1220,1224 'toolrout':447,474 'topic':567,573,603,611,618,636 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'tower':194,216 'tower-http':193,215 'trace':169,172,325,347,348,354,361,414,431,1109 'tracing-subscrib':171 'trait':182,457,459,528 'transport':76,187,246,251,257,260,266,319,376,381,413 'true':192,201,497,580,1156,1159,1234 'two':1193 'type':77,676,716,1059,1067,1073 'unit':1097 'unknown':641,722 'uri':659,712 'usag':244 'use':21,47,310,313,321,324,337,439,449,455,460,464,726,730,787,792,796,800,837,883,908,912,1043,1061,1088,1108 'user':56,631,1149,1287 'vec':547,564,629,657,703 'version':140,146,155,160,176,189,196 'wait':418 'warn':1113 'weather':71,88 'whether':93 'zero':1213","prices":[{"id":"a7bbf348-b3a9-4569-93c8-69c9500638a3","listingId":"f3232444-39a6-4300-96c6-9493133e62f3","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:25:50.507Z"}],"sources":[{"listingId":"f3232444-39a6-4300-96c6-9493133e62f3","source":"github","sourceId":"github/awesome-copilot/rust-mcp-server-generator","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/rust-mcp-server-generator","isPrimary":false,"firstSeenAt":"2026-04-18T21:51:09.232Z","lastSeenAt":"2026-05-18T18:52:24.637Z"},{"listingId":"f3232444-39a6-4300-96c6-9493133e62f3","source":"skills_sh","sourceId":"github/awesome-copilot/rust-mcp-server-generator","sourceUrl":"https://skills.sh/github/awesome-copilot/rust-mcp-server-generator","isPrimary":true,"firstSeenAt":"2026-04-18T20:25:50.507Z","lastSeenAt":"2026-05-07T22:40:18.172Z"}],"details":{"listingId":"f3232444-39a6-4300-96c6-9493133e62f3","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"rust-mcp-server-generator","github":{"repo":"github/awesome-copilot","stars":33270,"topics":["agent-skills","agents","ai","awesome","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"license":"mit","html_url":"https://github.com/github/awesome-copilot","pushed_at":"2026-05-18T01:26:59Z","description":"Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.","skill_md_sha":"64e982abdafb5c5ece6b51e46230fb92f3362b15","skill_md_path":"skills/rust-mcp-server-generator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/rust-mcp-server-generator"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"rust-mcp-server-generator","description":"Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK"},"skills_sh_url":"https://skills.sh/github/awesome-copilot/rust-mcp-server-generator"},"updatedAt":"2026-05-18T18:52:24.637Z"}}