{"id":47969411,"url":"https://github.com/dobermanch/dev-tools","last_synced_at":"2026-04-04T10:42:07.172Z","repository":{"id":271510981,"uuid":"913631347","full_name":"dobermanch/dev-tools","owner":"dobermanch","description":"A growing collection of developer utility tools — available as a CLI, REST API, and MCP server, all powered by a single .NET library.","archived":false,"fork":false,"pushed_at":"2026-02-24T07:41:59.000Z","size":798,"stargazers_count":3,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-24T09:40:07.463Z","etag":null,"topics":["cli","csharp","devtools","docker","dotnet","mcp-server","nuget","rest-api","ui","webapi","webassembly"],"latest_commit_sha":null,"homepage":"https://dobermanch.github.io/dev-tools/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dobermanch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-08T04:04:00.000Z","updated_at":"2026-02-24T07:40:47.000Z","dependencies_parsed_at":"2025-01-08T08:23:24.872Z","dependency_job_id":"f324ac85-6583-46e6-b2c1-39e6f81e94d6","html_url":"https://github.com/dobermanch/dev-tools","commit_stats":null,"previous_names":["dobermanch/dev-tools"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/dobermanch/dev-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobermanch%2Fdev-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobermanch%2Fdev-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobermanch%2Fdev-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobermanch%2Fdev-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dobermanch","download_url":"https://codeload.github.com/dobermanch/dev-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobermanch%2Fdev-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31397055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","csharp","devtools","docker","dotnet","mcp-server","nuget","rest-api","ui","webapi","webassembly"],"created_at":"2026-04-04T10:42:06.547Z","updated_at":"2026-04-04T10:42:07.161Z","avatar_url":"https://github.com/dobermanch.png","language":"C#","readme":"# Dev Tools\n\n[![CI](https://github.com/dobermanch/dev-tools/actions/workflows/ci.yml/badge.svg)](https://github.com/dobermanch/dev-tools/actions/workflows/ci.yml) [![Release](https://github.com/dobermanch/dev-tools/actions/workflows/release.yml/badge.svg)](https://github.com/dobermanch/dev-tools/actions/workflows/release.yml) [![GitHub Release](https://img.shields.io/github/v/release/dobermanch/dev-tools)](https://github.com/dobermanch/dev-tools/releases/latest) [![.NET](https://img.shields.io/badge/.NET-10.0-512bd4)](https://dotnet.microsoft.com/download/dotnet/10.0) [![License: MIT](https://img.shields.io/github/license/dobermanch/dev-tools)](LICENSE) [![Live Demo](https://img.shields.io/badge/demo-live-brightgreen)](https://dobermanch.github.io/dev-tools/)\n\n\u003e A growing collection of developer utility tools — available as a CLI, REST API, and MCP server, all powered by a single .NET library.\n\nDev Tools is built around one idea: **write a tool once, expose it everywhere**. Every tool is a single C# class decorated with `[ToolDefinition]`. At build time, Roslyn source generators automatically produce a CLI command, an API endpoint, and an MCP tool definition - no boilerplate, no duplication.\n\nThe library covers everyday developer tasks: encoding and decoding (Base64, URL, case formats), cryptographic operations (hashing, encryption, JWT parsing), identifier generation (UUID v3-v7, ULID, tokens, passphrases), data formatting (JSON, XML), and more. Tools are independently installable and usable across all four frontends:\n\n- **CLI**: a `dotnet` global tool, fully pipeable\n- **REST API**: an ASP.NET Core service with interactive Scalar docs\n- **Web UI**: a Blazor WebAssembly app (MudBlazor)\n- **MCP Server**: plugs directly into Claude, Cursor, and other AI assistants\n- **NuGet**: embed the tools directly in your .NET application\n\nTools are localized (English and Ukrainian), multi-arch Docker images are published on every release.\n\nTry the **[live demo](https://dobermanch.github.io/dev-tools/)** - no installation needed.\n\n---\n\n## Table of Contents\n\n- [Dev Tools](#dev-tools)\n  - [Table of Contents](#table-of-contents)\n  - [Features](#features)\n  - [Available Tools](#available-tools)\n  - [Usage](#usage)\n    - [Web UI](#web-ui)\n    - [CLI](#cli)\n    - [REST API](#rest-api)\n    - [MCP Server (AI assistants)](#mcp-server-ai-assistants)\n      - [Run via DotNet Tool](#run-via-dotnet-tool)\n      - [Run via Docker](#run-via-docker)\n    - [NuGet Library](#nuget-library)\n    - [All-in-one Docker Image](#all-in-one-docker-image)\n  - [Building Locally](#building-locally)\n    - [Prerequisites](#prerequisites)\n    - [Clone And Build](#clone-and-build)\n    - [Make Targets](#make-targets)\n  - [License](#license)\n\n---\n\n## Features\n\n- **Write once, expose everywhere** — CLI, REST API, and MCP server all auto-generated from a single `[ToolDefinition]` attribute via Roslyn source generators\n- **Growing tool library** — encoding, hashing, encryption, UUID/ULID generation, JWT parsing, formatters, and more\n- **Pipeable CLI** — compose tools with Unix pipes: `echo \"hello\" | dev-tools base64-encoder`\n- **AI assistant integration** — MCP server works with Claude, Cursor, and any MCP-compatible host\n- **Localization** — English and Ukrainian\n- **Multi-arch Docker images** — `linux/amd64` and `linux/arm64`, published on every release\n- **Extensible** — add a new tool in a single `.cs` file and UI component; the rest is wired up at build time\n\n---\n\n## Available Tools\n\nSee [docs/tools.md](docs/tools.md) for the full categorized reference with aliases and descriptions.\n\n---\n\n## Usage\n\n### Web UI\n\nRun locally with Docker:\n\n```bash\ndocker run -p 8080:8080 ghcr.io/dobermanch/dev-tools-web\n```\n\nOpen `http://localhost:8080` in your browser.\n\n---\n\n### CLI\n\nInstall as a dotnet global tool:\n\n```bash\ndotnet tool install --global Dev.Tools.Console\n```\n\n```bash\n# Encode to Base64\ndev-tools base64-encoder \"Hello, World!\"\n# → SGVsbG8sIFdvcmxkIQ==\n\n# Pipe tools together\necho \"Hello, World!\" | dev-tools base64-encoder | dev-tools base64-decoder\n\n# Format JSON (sort keys)\necho '{\"b\":2,\"a\":1}' | dev-tools json-formatter --sort-keys Ascending\n\n# Get help\ndev-tools --help\ndev-tools hash --help\n```\n\nOr run without installing via Docker:\n\n```bash\ndocker run --rm ghcr.io/dobermanch/dev-tools-console base64-encoder \"Hello, World!\"\n# → SGVsbG8sIFdvcmxkIQ==\n\n# Pipe into the container\necho \"Hello, World!\" | docker run --rm -i ghcr.io/dobermanch/dev-tools-console base64-encoder\n```\n\n---\n\n### REST API\n\nRun as a Docker container:\n\n```bash\ndocker run -p 8080:8080 ghcr.io/dobermanch/dev-tools-api\n```\n\nCall an endpoint:\n\n```bash\n# Encode to Base64\ncurl -X POST http://localhost:8080/tools/base64-encoder \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\": \"Hello, World!\"}'\n```\n\nInteractive API documentation (Scalar UI) is available at `http://localhost:8080/ui`.\n\n---\n\n### MCP Server (AI assistants)\n\nOnce registered, your assistant can use any tool directly — e.g., *\"hash this text with SHA-256\"* or *\"generate 5 UUIDs\"*.\n\n#### Run via DotNet Tool\n\nInstall the MCP server as a global tool and register it in your AI assistant configuration.\n\n```bash\ndotnet tool install --global Dev.Tools.Mcp\n```\n\nAdd to AI agent MCP config\n\n```json\n\"dev-tools\": {\n  \"type\": \"stdio\",\n  \"command\": \"dev-tools-mcp\"\n}\n```\n\n#### Run via Docker\n\nUse Docker `dev-tools-mcp` image and register it in your AI assistant configuration.\n\n**Using stdio transport:**\n\n```json\n\"dev-tools\": {\n  \"type\": \"stdio\",\n  \"command\": \"docker\",\n  \"args\": [\"run\", \"--rm\", \"-i\", \"-e\", \"MCP_TRANSPORT=stdio\", \"ghcr.io/dobermanch/dev-tools-mcp\"]\n}\n```\n\n**Using HTTP transport:**\n\n```json\n\"dev-tools\": {\n  \"type\": \"http\",\n  \"command\": \"docker\",\n  \"args\": [\"run\", \"--rm\", \"-i\", \"ghcr.io/dobermanch/dev-tools-mcp\"]\n}\n```\n\n---\n\n### NuGet Library\n\nEmbed the tools directly in your .NET application.\n\n```bash\ndotnet add package Dev.Tools\n```\n\n```csharp\n// Base64 encode\nvar encoded = await new Base64EncoderTool().RunAsync(\n    new Base64EncoderTool.Args(\"Hello, World!\"),\n    CancellationToken.None);\n\nConsole.WriteLine(encoded.Output); // SGVsbG8sIFdvcmxkIQ==\n```\n\n---\n\n### All-in-one Docker Image\n\nThe `dev-tools` image bundles the Web UI, REST API, and MCP server into a single container — useful for self-hosting or quick local demos.\n\n```bash\ndocker run -p 80:80 -p 8080:8080 -p 8081:8081 ghcr.io/dobermanch/dev-tools\n```\n\n| Port   | Service                     | Urls                        |\n| ------ | --------------------------- | --------------------------- |\n| `80`   | Web UI                      | `http://localhost`          |\n| `8080` | REST API                    | `http://localhost:8080`, `http://localhost:8080/ui`     |\n| `8081` | MCP server (HTTP transport) | `http://localhost:8081`     |\n\n---\n\n## Building Locally\n\n### Prerequisites\n\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- Docker (optional — for container builds)\n- Make (optional — for convenience targets)\n\n### Clone And Build\n\n```bash\ngit clone https://github.com/dobermanch/dev-tools.git\ncd dev-tools\n\ndotnet restore\ndotnet build\ndotnet test\n```\n\nRun a specific test class:\n\n```bash\ndotnet test --filter \"ClassName=Base64EncoderToolTests\"\n```\n\n### Make Targets\n\n```bash\nmake tool      # Pack and install Dev.Tools.Console globally\nmake mcp       # Pack and install Dev.Tools.Mcp globally\nmake nuget     # Pack the Dev.Tools NuGet package\nmake docker    # Build all Docker images locally\nmake clean     # Remove build artifacts and Docker images\n```\n\n---\n\n## License\n\n[MIT](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdobermanch%2Fdev-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdobermanch%2Fdev-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdobermanch%2Fdev-tools/lists"}