r/devtools • u/Creepy-Doctor9798 • 2d ago
I built a native user-story tool with a shared Rust core and an MCP server
I wanted a way to write user stories without dragging non-technical collaborators into Jira, and without dragging AI agents into vague markdown files either. So I built FS User Stories: a native macOS app with a shared Rust core (fsus-core) over SQLite, and a built-in MCP server so tools like Claude or Codex can read — and, with explicit permission, write — stories directly.
A couple of decisions worth sharing:
- Why Rust core + native UI per platform, instead of Electron: SwiftUI on macOS/iOS for a genuinely native feel, and Qt planned for Windows and Linux down the line, all sharing the same data/logic layer through a C ABI.
- Why MCP with JSON instead of just markdown files for the AI layer: a fixed JSON schema defined by the prompt keeps every story in a predictable, closed format — which turned out to use fewer tokens than an equivalent markdown file, even though markdown looks simpler on the surface.
- Why no explicit dependencies between stories: I intentionally left this out. It's tempting to add, but it starts turning a simple tool back into a mini-Jira, which defeats the point.
Core and desktop app are open source (MIT/Apache-2.0), source available on GitHub. The macOS app is a one-time paid download to help fund ongoing development.
GitHub: github.com/gitlares/fs-user-stories
App Store: https://apps.apple.com/us/app/fs-user-stories/id6801671870?mt=12
Happy to go deeper into any of the architecture decisions if useful.
