├── configuration ├── default_settings.jsonc └── installation_instructions.md ├── Cargo.toml ├── extension.toml ├── .github └── workflows │ └── release.yml ├── .gitignore ├── README.md ├── LICENSE ├── src └── mcp_server_github.rs └── Cargo.lock /configuration/default_settings.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | /// Your GitHub Personal Access Token 3 | "github_personal_access_token": "GITHUB_PERSONAL_ACCESS_TOKEN" 4 | } 5 | -------------------------------------------------------------------------------- /configuration/installation_instructions.md: -------------------------------------------------------------------------------- 1 | To use GitHub's MCP, go to your account's Developer Settings and [create a Personal Access Token](https://github.com/settings/tokens). 2 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "mcp_server_github" 3 | version = "0.1.0" 4 | edition = "2021" 5 | publish = false 6 | license = "MIT" 7 | 8 | [lib] 9 | path = "src/mcp_server_github.rs" 10 | crate-type = ["cdylib"] 11 | 12 | [dependencies] 13 | serde = "1.0" 14 | schemars = "0.8" 15 | zed_extension_api = "0.7.0" 16 | -------------------------------------------------------------------------------- /extension.toml: -------------------------------------------------------------------------------- 1 | id = "mcp-server-github" 2 | name = "GitHub MCP Server" 3 | description = "Model Context Protocol Server for GitHub" 4 | version = "0.1.0" 5 | schema_version = 1 6 | authors = ["Jeffrey Guenther "] 7 | repository = "https://github.com/LoamStudios/zed-mcp-server-github" 8 | 9 | [context_servers.mcp-server-github] 10 | name = "GitHub MCP Server" 11 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | tags: 4 | - "v*" 5 | 6 | jobs: 7 | release: 8 | name: Release Zed Extension 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: huacnlee/zed-extension-action@v1 12 | with: 13 | extension-name: mcp-server-github 14 | # extension-path: extensions/${{ extension-name }} 15 | push-to: LoamStudios/zed-extensions 16 | env: 17 | # the personal access token should have "repo" & "workflow" scopes 18 | COMMITTER_TOKEN: ${{ secrets.COMMITTER_TOKEN }} 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | debug/ 4 | target/ 5 | 6 | # These are backup files generated by rustfmt 7 | **/*.rs.bk 8 | 9 | # MSVC Windows builds of rustc generate these, which store debugging information 10 | *.pdb 11 | 12 | # RustRover 13 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 14 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 15 | # and can be added to the global gitignore or merged into this file. For a more nuclear 16 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 17 | #.idea/ 18 | # 19 | # 20 | extension.wasm 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub MCP Server Extension for Zed 2 | 3 | This extension integrates [GitHub MCP Server](https://github.com/github/github-mcp-server) as a context server for 4 | [Zed's](https://zed.dev) [Agent Panel.](https://zed.dev/docs/ai/overview) 5 | 6 | To install navigate to: **Zed** > **Extensions**. Or use the command palette ([macOS](https://github.com/zed-industries/zed/blob/main/assets/keymaps/default-macos.json#L581), [Linux](https://github.com/zed-industries/zed/blob/main/assets/keymaps/default-linux.json#L459)) to search `extensions`. 7 | 8 | You'll need to [create](https://github.com/settings/tokens) a PAT with `repo` permissions. 9 | 10 | ```json 11 | "context_servers": { 12 | "mcp-server-github": { 13 | "source": "extension", 14 | "settings": { 15 | "github_personal_access_token": "" 16 | } 17 | } 18 | }, 19 | ``` 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Loam Studios 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/mcp_server_github.rs: -------------------------------------------------------------------------------- 1 | use schemars::JsonSchema; 2 | use serde::Deserialize; 3 | use std::fs; 4 | use zed::settings::ContextServerSettings; 5 | use zed_extension_api::{ 6 | self as zed, serde_json, Command, ContextServerConfiguration, ContextServerId, Project, Result, 7 | }; 8 | 9 | const REPO_NAME: &str = "github/github-mcp-server"; 10 | const BINARY_NAME: &str = "github-mcp-server"; 11 | 12 | #[derive(Debug, Deserialize, JsonSchema)] 13 | struct GitHubContextServerSettings { 14 | github_personal_access_token: String, 15 | } 16 | 17 | struct GitHubModelContextExtension { 18 | cached_binary_path: Option, 19 | } 20 | 21 | impl GitHubModelContextExtension { 22 | fn context_server_binary_path( 23 | &mut self, 24 | _context_server_id: &ContextServerId, 25 | ) -> Result { 26 | if let Some(path) = &self.cached_binary_path { 27 | if fs::metadata(path).map_or(false, |stat| stat.is_file()) { 28 | return Ok(path.clone()); 29 | } 30 | } 31 | 32 | let release = zed::latest_github_release( 33 | REPO_NAME, 34 | zed::GithubReleaseOptions { 35 | require_assets: true, 36 | pre_release: false, 37 | }, 38 | )?; 39 | 40 | let (platform, arch) = zed::current_platform(); 41 | let asset_name = format!( 42 | "{BINARY_NAME}_{os}_{arch}.{ext}", 43 | arch = match arch { 44 | zed::Architecture::Aarch64 => "arm64", 45 | zed::Architecture::X86 => "i386", 46 | zed::Architecture::X8664 => "x86_64", 47 | }, 48 | os = match platform { 49 | zed::Os::Mac => "Darwin", 50 | zed::Os::Linux => "Linux", 51 | zed::Os::Windows => "Windows", 52 | }, 53 | ext = match platform { 54 | zed::Os::Mac | zed::Os::Linux => "tar.gz", 55 | zed::Os::Windows => "zip", 56 | } 57 | ); 58 | 59 | let asset = release 60 | .assets 61 | .iter() 62 | .find(|asset| asset.name == asset_name) 63 | .ok_or_else(|| format!("no asset found matching {:?}", asset_name))?; 64 | 65 | let version_dir = format!("{BINARY_NAME}-{}", release.version); 66 | fs::create_dir_all(&version_dir) 67 | .map_err(|err| format!("failed to create directory '{version_dir}': {err}"))?; 68 | let binary_path = format!( 69 | "{version_dir}/{BINARY_NAME}{suffix}", 70 | suffix = match platform { 71 | zed::Os::Windows => ".exe", 72 | _ => "", 73 | } 74 | ); 75 | 76 | if !fs::metadata(&binary_path).map_or(false, |stat| stat.is_file()) { 77 | let file_kind = match platform { 78 | zed::Os::Mac | zed::Os::Linux => zed::DownloadedFileType::GzipTar, 79 | zed::Os::Windows => zed::DownloadedFileType::Zip, 80 | }; 81 | 82 | zed::download_file(&asset.download_url, &version_dir, file_kind) 83 | .map_err(|e| format!("failed to download file: {e}"))?; 84 | 85 | zed::make_file_executable(&binary_path)?; 86 | 87 | // Removes old versions 88 | let entries = 89 | fs::read_dir(".").map_err(|e| format!("failed to list working directory {e}"))?; 90 | for entry in entries { 91 | let entry = entry.map_err(|e| format!("failed to load directory entry {e}"))?; 92 | if entry.file_name().to_str() != Some(&version_dir) { 93 | fs::remove_dir_all(entry.path()).ok(); 94 | } 95 | } 96 | } 97 | 98 | self.cached_binary_path = Some(binary_path.clone()); 99 | Ok(binary_path) 100 | } 101 | } 102 | 103 | impl zed::Extension for GitHubModelContextExtension { 104 | fn new() -> Self { 105 | Self { 106 | cached_binary_path: None, 107 | } 108 | } 109 | 110 | fn context_server_command( 111 | &mut self, 112 | context_server_id: &ContextServerId, 113 | project: &Project, 114 | ) -> Result { 115 | let settings = ContextServerSettings::for_project("mcp-server-github", project)?; 116 | let Some(settings) = settings.settings else { 117 | return Err("missing `github_personal_access_token` setting".into()); 118 | }; 119 | let settings: GitHubContextServerSettings = 120 | serde_json::from_value(settings).map_err(|e| e.to_string())?; 121 | 122 | Ok(Command { 123 | command: self.context_server_binary_path(context_server_id)?, 124 | args: vec!["stdio".to_string()], 125 | env: vec![( 126 | "GITHUB_PERSONAL_ACCESS_TOKEN".into(), 127 | settings.github_personal_access_token, 128 | )], 129 | }) 130 | } 131 | 132 | fn context_server_configuration( 133 | &mut self, 134 | _context_server_id: &ContextServerId, 135 | _project: &Project, 136 | ) -> Result> { 137 | let installation_instructions = 138 | include_str!("../configuration/installation_instructions.md").to_string(); 139 | let default_settings = include_str!("../configuration/default_settings.jsonc").to_string(); 140 | let settings_schema = 141 | serde_json::to_string(&schemars::schema_for!(GitHubContextServerSettings)) 142 | .map_err(|e| e.to_string())?; 143 | 144 | Ok(Some(ContextServerConfiguration { 145 | installation_instructions, 146 | default_settings, 147 | settings_schema, 148 | })) 149 | } 150 | } 151 | 152 | zed::register_extension!(GitHubModelContextExtension); 153 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "adler2" 7 | version = "2.0.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 10 | 11 | [[package]] 12 | name = "anyhow" 13 | version = "1.0.97" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" 16 | 17 | [[package]] 18 | name = "auditable-serde" 19 | version = "0.8.0" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "5c7bf8143dfc3c0258df908843e169b5cc5fcf76c7718bd66135ef4a9cd558c5" 22 | dependencies = [ 23 | "semver", 24 | "serde", 25 | "serde_json", 26 | "topological-sort", 27 | ] 28 | 29 | [[package]] 30 | name = "autocfg" 31 | version = "1.4.0" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 34 | 35 | [[package]] 36 | name = "bitflags" 37 | version = "2.9.0" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 40 | 41 | [[package]] 42 | name = "cfg-if" 43 | version = "1.0.0" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 46 | 47 | [[package]] 48 | name = "crc32fast" 49 | version = "1.4.2" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 52 | dependencies = [ 53 | "cfg-if", 54 | ] 55 | 56 | [[package]] 57 | name = "displaydoc" 58 | version = "0.2.5" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 61 | dependencies = [ 62 | "proc-macro2", 63 | "quote", 64 | "syn", 65 | ] 66 | 67 | [[package]] 68 | name = "dyn-clone" 69 | version = "1.0.19" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" 72 | 73 | [[package]] 74 | name = "equivalent" 75 | version = "1.0.2" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 78 | 79 | [[package]] 80 | name = "flate2" 81 | version = "1.1.1" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" 84 | dependencies = [ 85 | "crc32fast", 86 | "miniz_oxide", 87 | ] 88 | 89 | [[package]] 90 | name = "foldhash" 91 | version = "0.1.5" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 94 | 95 | [[package]] 96 | name = "form_urlencoded" 97 | version = "1.2.1" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 100 | dependencies = [ 101 | "percent-encoding", 102 | ] 103 | 104 | [[package]] 105 | name = "futures" 106 | version = "0.3.31" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 109 | dependencies = [ 110 | "futures-channel", 111 | "futures-core", 112 | "futures-executor", 113 | "futures-io", 114 | "futures-sink", 115 | "futures-task", 116 | "futures-util", 117 | ] 118 | 119 | [[package]] 120 | name = "futures-channel" 121 | version = "0.3.31" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 124 | dependencies = [ 125 | "futures-core", 126 | "futures-sink", 127 | ] 128 | 129 | [[package]] 130 | name = "futures-core" 131 | version = "0.3.31" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 134 | 135 | [[package]] 136 | name = "futures-executor" 137 | version = "0.3.31" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 140 | dependencies = [ 141 | "futures-core", 142 | "futures-task", 143 | "futures-util", 144 | ] 145 | 146 | [[package]] 147 | name = "futures-io" 148 | version = "0.3.31" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 151 | 152 | [[package]] 153 | name = "futures-macro" 154 | version = "0.3.31" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 157 | dependencies = [ 158 | "proc-macro2", 159 | "quote", 160 | "syn", 161 | ] 162 | 163 | [[package]] 164 | name = "futures-sink" 165 | version = "0.3.31" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 168 | 169 | [[package]] 170 | name = "futures-task" 171 | version = "0.3.31" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 174 | 175 | [[package]] 176 | name = "futures-util" 177 | version = "0.3.31" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 180 | dependencies = [ 181 | "futures-channel", 182 | "futures-core", 183 | "futures-io", 184 | "futures-macro", 185 | "futures-sink", 186 | "futures-task", 187 | "memchr", 188 | "pin-project-lite", 189 | "pin-utils", 190 | "slab", 191 | ] 192 | 193 | [[package]] 194 | name = "hashbrown" 195 | version = "0.15.2" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 198 | dependencies = [ 199 | "foldhash", 200 | ] 201 | 202 | [[package]] 203 | name = "heck" 204 | version = "0.5.0" 205 | source = "registry+https://github.com/rust-lang/crates.io-index" 206 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 207 | 208 | [[package]] 209 | name = "icu_collections" 210 | version = "1.5.0" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 213 | dependencies = [ 214 | "displaydoc", 215 | "yoke", 216 | "zerofrom", 217 | "zerovec", 218 | ] 219 | 220 | [[package]] 221 | name = "icu_locid" 222 | version = "1.5.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 225 | dependencies = [ 226 | "displaydoc", 227 | "litemap", 228 | "tinystr", 229 | "writeable", 230 | "zerovec", 231 | ] 232 | 233 | [[package]] 234 | name = "icu_locid_transform" 235 | version = "1.5.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 238 | dependencies = [ 239 | "displaydoc", 240 | "icu_locid", 241 | "icu_locid_transform_data", 242 | "icu_provider", 243 | "tinystr", 244 | "zerovec", 245 | ] 246 | 247 | [[package]] 248 | name = "icu_locid_transform_data" 249 | version = "1.5.1" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" 252 | 253 | [[package]] 254 | name = "icu_normalizer" 255 | version = "1.5.0" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 258 | dependencies = [ 259 | "displaydoc", 260 | "icu_collections", 261 | "icu_normalizer_data", 262 | "icu_properties", 263 | "icu_provider", 264 | "smallvec", 265 | "utf16_iter", 266 | "utf8_iter", 267 | "write16", 268 | "zerovec", 269 | ] 270 | 271 | [[package]] 272 | name = "icu_normalizer_data" 273 | version = "1.5.1" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" 276 | 277 | [[package]] 278 | name = "icu_properties" 279 | version = "1.5.1" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 282 | dependencies = [ 283 | "displaydoc", 284 | "icu_collections", 285 | "icu_locid_transform", 286 | "icu_properties_data", 287 | "icu_provider", 288 | "tinystr", 289 | "zerovec", 290 | ] 291 | 292 | [[package]] 293 | name = "icu_properties_data" 294 | version = "1.5.1" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" 297 | 298 | [[package]] 299 | name = "icu_provider" 300 | version = "1.5.0" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 303 | dependencies = [ 304 | "displaydoc", 305 | "icu_locid", 306 | "icu_provider_macros", 307 | "stable_deref_trait", 308 | "tinystr", 309 | "writeable", 310 | "yoke", 311 | "zerofrom", 312 | "zerovec", 313 | ] 314 | 315 | [[package]] 316 | name = "icu_provider_macros" 317 | version = "1.5.0" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 320 | dependencies = [ 321 | "proc-macro2", 322 | "quote", 323 | "syn", 324 | ] 325 | 326 | [[package]] 327 | name = "id-arena" 328 | version = "2.2.1" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" 331 | 332 | [[package]] 333 | name = "idna" 334 | version = "1.0.3" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 337 | dependencies = [ 338 | "idna_adapter", 339 | "smallvec", 340 | "utf8_iter", 341 | ] 342 | 343 | [[package]] 344 | name = "idna_adapter" 345 | version = "1.2.0" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 348 | dependencies = [ 349 | "icu_normalizer", 350 | "icu_properties", 351 | ] 352 | 353 | [[package]] 354 | name = "indexmap" 355 | version = "2.8.0" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" 358 | dependencies = [ 359 | "equivalent", 360 | "hashbrown", 361 | "serde", 362 | ] 363 | 364 | [[package]] 365 | name = "itoa" 366 | version = "1.0.15" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 369 | 370 | [[package]] 371 | name = "leb128fmt" 372 | version = "0.1.0" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 375 | 376 | [[package]] 377 | name = "litemap" 378 | version = "0.7.5" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 381 | 382 | [[package]] 383 | name = "log" 384 | version = "0.4.27" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 387 | 388 | [[package]] 389 | name = "mcp_server_github" 390 | version = "0.1.0" 391 | dependencies = [ 392 | "schemars", 393 | "serde", 394 | "zed_extension_api", 395 | ] 396 | 397 | [[package]] 398 | name = "memchr" 399 | version = "2.7.4" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 402 | 403 | [[package]] 404 | name = "miniz_oxide" 405 | version = "0.8.8" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 408 | dependencies = [ 409 | "adler2", 410 | ] 411 | 412 | [[package]] 413 | name = "once_cell" 414 | version = "1.21.3" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 417 | 418 | [[package]] 419 | name = "percent-encoding" 420 | version = "2.3.1" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 423 | 424 | [[package]] 425 | name = "pin-project-lite" 426 | version = "0.2.16" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 429 | 430 | [[package]] 431 | name = "pin-utils" 432 | version = "0.1.0" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 435 | 436 | [[package]] 437 | name = "prettyplease" 438 | version = "0.2.32" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" 441 | dependencies = [ 442 | "proc-macro2", 443 | "syn", 444 | ] 445 | 446 | [[package]] 447 | name = "proc-macro2" 448 | version = "1.0.94" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" 451 | dependencies = [ 452 | "unicode-ident", 453 | ] 454 | 455 | [[package]] 456 | name = "quote" 457 | version = "1.0.40" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 460 | dependencies = [ 461 | "proc-macro2", 462 | ] 463 | 464 | [[package]] 465 | name = "ryu" 466 | version = "1.0.20" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 469 | 470 | [[package]] 471 | name = "schemars" 472 | version = "0.8.22" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" 475 | dependencies = [ 476 | "dyn-clone", 477 | "schemars_derive", 478 | "serde", 479 | "serde_json", 480 | ] 481 | 482 | [[package]] 483 | name = "schemars_derive" 484 | version = "0.8.22" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" 487 | dependencies = [ 488 | "proc-macro2", 489 | "quote", 490 | "serde_derive_internals", 491 | "syn", 492 | ] 493 | 494 | [[package]] 495 | name = "semver" 496 | version = "1.0.26" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 499 | dependencies = [ 500 | "serde", 501 | ] 502 | 503 | [[package]] 504 | name = "serde" 505 | version = "1.0.219" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 508 | dependencies = [ 509 | "serde_derive", 510 | ] 511 | 512 | [[package]] 513 | name = "serde_derive" 514 | version = "1.0.219" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 517 | dependencies = [ 518 | "proc-macro2", 519 | "quote", 520 | "syn", 521 | ] 522 | 523 | [[package]] 524 | name = "serde_derive_internals" 525 | version = "0.29.1" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" 528 | dependencies = [ 529 | "proc-macro2", 530 | "quote", 531 | "syn", 532 | ] 533 | 534 | [[package]] 535 | name = "serde_json" 536 | version = "1.0.140" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 539 | dependencies = [ 540 | "itoa", 541 | "memchr", 542 | "ryu", 543 | "serde", 544 | ] 545 | 546 | [[package]] 547 | name = "slab" 548 | version = "0.4.9" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 551 | dependencies = [ 552 | "autocfg", 553 | ] 554 | 555 | [[package]] 556 | name = "smallvec" 557 | version = "1.14.0" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" 560 | 561 | [[package]] 562 | name = "spdx" 563 | version = "0.10.8" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "58b69356da67e2fc1f542c71ea7e654a361a79c938e4424392ecf4fa065d2193" 566 | dependencies = [ 567 | "smallvec", 568 | ] 569 | 570 | [[package]] 571 | name = "stable_deref_trait" 572 | version = "1.2.0" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 575 | 576 | [[package]] 577 | name = "syn" 578 | version = "2.0.100" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" 581 | dependencies = [ 582 | "proc-macro2", 583 | "quote", 584 | "unicode-ident", 585 | ] 586 | 587 | [[package]] 588 | name = "synstructure" 589 | version = "0.13.2" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 592 | dependencies = [ 593 | "proc-macro2", 594 | "quote", 595 | "syn", 596 | ] 597 | 598 | [[package]] 599 | name = "tinystr" 600 | version = "0.7.6" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 603 | dependencies = [ 604 | "displaydoc", 605 | "zerovec", 606 | ] 607 | 608 | [[package]] 609 | name = "topological-sort" 610 | version = "0.2.2" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" 613 | 614 | [[package]] 615 | name = "unicode-ident" 616 | version = "1.0.18" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 619 | 620 | [[package]] 621 | name = "unicode-xid" 622 | version = "0.2.6" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 625 | 626 | [[package]] 627 | name = "url" 628 | version = "2.5.4" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 631 | dependencies = [ 632 | "form_urlencoded", 633 | "idna", 634 | "percent-encoding", 635 | ] 636 | 637 | [[package]] 638 | name = "utf16_iter" 639 | version = "1.0.5" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 642 | 643 | [[package]] 644 | name = "utf8_iter" 645 | version = "1.0.4" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 648 | 649 | [[package]] 650 | name = "wasm-encoder" 651 | version = "0.227.1" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "80bb72f02e7fbf07183443b27b0f3d4144abf8c114189f2e088ed95b696a7822" 654 | dependencies = [ 655 | "leb128fmt", 656 | "wasmparser", 657 | ] 658 | 659 | [[package]] 660 | name = "wasm-metadata" 661 | version = "0.227.1" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "ce1ef0faabbbba6674e97a56bee857ccddf942785a336c8b47b42373c922a91d" 664 | dependencies = [ 665 | "anyhow", 666 | "auditable-serde", 667 | "flate2", 668 | "indexmap", 669 | "serde", 670 | "serde_derive", 671 | "serde_json", 672 | "spdx", 673 | "url", 674 | "wasm-encoder", 675 | "wasmparser", 676 | ] 677 | 678 | [[package]] 679 | name = "wasmparser" 680 | version = "0.227.1" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | checksum = "0f51cad774fb3c9461ab9bccc9c62dfb7388397b5deda31bf40e8108ccd678b2" 683 | dependencies = [ 684 | "bitflags", 685 | "hashbrown", 686 | "indexmap", 687 | "semver", 688 | ] 689 | 690 | [[package]] 691 | name = "wit-bindgen" 692 | version = "0.41.0" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "10fb6648689b3929d56bbc7eb1acf70c9a42a29eb5358c67c10f54dbd5d695de" 695 | dependencies = [ 696 | "wit-bindgen-rt", 697 | "wit-bindgen-rust-macro", 698 | ] 699 | 700 | [[package]] 701 | name = "wit-bindgen-core" 702 | version = "0.41.0" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "92fa781d4f2ff6d3f27f3cc9b74a73327b31ca0dc4a3ef25a0ce2983e0e5af9b" 705 | dependencies = [ 706 | "anyhow", 707 | "heck", 708 | "wit-parser", 709 | ] 710 | 711 | [[package]] 712 | name = "wit-bindgen-rt" 713 | version = "0.41.0" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | checksum = "c4db52a11d4dfb0a59f194c064055794ee6564eb1ced88c25da2cf76e50c5621" 716 | dependencies = [ 717 | "bitflags", 718 | "futures", 719 | "once_cell", 720 | ] 721 | 722 | [[package]] 723 | name = "wit-bindgen-rust" 724 | version = "0.41.0" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "9d0809dc5ba19e2e98661bf32fc0addc5a3ca5bf3a6a7083aa6ba484085ff3ce" 727 | dependencies = [ 728 | "anyhow", 729 | "heck", 730 | "indexmap", 731 | "prettyplease", 732 | "syn", 733 | "wasm-metadata", 734 | "wit-bindgen-core", 735 | "wit-component", 736 | ] 737 | 738 | [[package]] 739 | name = "wit-bindgen-rust-macro" 740 | version = "0.41.0" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | checksum = "ad19eec017904e04c60719592a803ee5da76cb51c81e3f6fbf9457f59db49799" 743 | dependencies = [ 744 | "anyhow", 745 | "prettyplease", 746 | "proc-macro2", 747 | "quote", 748 | "syn", 749 | "wit-bindgen-core", 750 | "wit-bindgen-rust", 751 | ] 752 | 753 | [[package]] 754 | name = "wit-component" 755 | version = "0.227.1" 756 | source = "registry+https://github.com/rust-lang/crates.io-index" 757 | checksum = "635c3adc595422cbf2341a17fb73a319669cc8d33deed3a48368a841df86b676" 758 | dependencies = [ 759 | "anyhow", 760 | "bitflags", 761 | "indexmap", 762 | "log", 763 | "serde", 764 | "serde_derive", 765 | "serde_json", 766 | "wasm-encoder", 767 | "wasm-metadata", 768 | "wasmparser", 769 | "wit-parser", 770 | ] 771 | 772 | [[package]] 773 | name = "wit-parser" 774 | version = "0.227.1" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "ddf445ed5157046e4baf56f9138c124a0824d4d1657e7204d71886ad8ce2fc11" 777 | dependencies = [ 778 | "anyhow", 779 | "id-arena", 780 | "indexmap", 781 | "log", 782 | "semver", 783 | "serde", 784 | "serde_derive", 785 | "serde_json", 786 | "unicode-xid", 787 | "wasmparser", 788 | ] 789 | 790 | [[package]] 791 | name = "write16" 792 | version = "1.0.0" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 795 | 796 | [[package]] 797 | name = "writeable" 798 | version = "0.5.5" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 801 | 802 | [[package]] 803 | name = "yoke" 804 | version = "0.7.5" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 807 | dependencies = [ 808 | "serde", 809 | "stable_deref_trait", 810 | "yoke-derive", 811 | "zerofrom", 812 | ] 813 | 814 | [[package]] 815 | name = "yoke-derive" 816 | version = "0.7.5" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 819 | dependencies = [ 820 | "proc-macro2", 821 | "quote", 822 | "syn", 823 | "synstructure", 824 | ] 825 | 826 | [[package]] 827 | name = "zed_extension_api" 828 | version = "0.7.0" 829 | source = "registry+https://github.com/rust-lang/crates.io-index" 830 | checksum = "0729d50b4ca0a7e28e590bbe32e3ca0194d97ef654961451a424c661a366fca0" 831 | dependencies = [ 832 | "serde", 833 | "serde_json", 834 | "wit-bindgen", 835 | ] 836 | 837 | [[package]] 838 | name = "zerofrom" 839 | version = "0.1.6" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 842 | dependencies = [ 843 | "zerofrom-derive", 844 | ] 845 | 846 | [[package]] 847 | name = "zerofrom-derive" 848 | version = "0.1.6" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 851 | dependencies = [ 852 | "proc-macro2", 853 | "quote", 854 | "syn", 855 | "synstructure", 856 | ] 857 | 858 | [[package]] 859 | name = "zerovec" 860 | version = "0.10.4" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 863 | dependencies = [ 864 | "yoke", 865 | "zerofrom", 866 | "zerovec-derive", 867 | ] 868 | 869 | [[package]] 870 | name = "zerovec-derive" 871 | version = "0.10.3" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 874 | dependencies = [ 875 | "proc-macro2", 876 | "quote", 877 | "syn", 878 | ] 879 | --------------------------------------------------------------------------------