diff --git a/documentation/docs/mcp/i-ching.md b/documentation/docs/mcp/i-ching.md new file mode 100644 index 000000000000..fd9a1eee76b0 --- /dev/null +++ b/documentation/docs/mcp/i-ching.md @@ -0,0 +1,90 @@ +--- +title: I Ching Extension +description: Add I Ching MCP Server as a Goose Extension +--- + +This tutorial covers how to add the [I Ching MCP Server](https://github.com/threemachines/i-ching) as a Goose extension to enable traditional I Ching divination readings. + +:::tip TLDR +1. Install: `cargo install i-ching` +2. Configure: [Add I Ching Extension](goose://extension?cmd=i-ching-mcp-server&id=i-ching&name=I%20Ching&description=I%20Ching%20divination%20readings) +::: + +## Installation + +This extension requires Rust 1.85.1 or later. Check your version: + +```bash +rustc --version +``` + +If you need to install or update Rust, visit [rustup.rs](https://rustup.rs/). + +:::tip Use Goose to Help! +If you're unsure about any of these steps, you can ask Goose to help you check your system and guide you through the Rust installation process. +::: + +Once Rust is ready, install the I Ching crate from crates.io: + +```bash +cargo install i-ching +``` + +Then click the link above to configure it in Goose. + +## Example Usage + +### Goose Prompt + +> Our team is facing a challenging decision about our product roadmap. Could you consult the I Ching for some perspective on how to approach this choice? + +### Goose Output + +I'd be happy to consult the I Ching for guidance on your team's product roadmap decision. Let me cast a hexagram for you using the traditional three coins method. +─── cast_hexagram | iching ────────────────────────── + + + +Now let me get a detailed interpretation of this reading for your situation: +─── interpret_reading | iching ────────────────────────── +changing_lines: + - + 5 +hexagram: 29 +transformed_hexagram: 13 + + + +## I Ching Guidance for Your Product Roadmap Decision + +The oracle has given you **Hexagram 29 - Darkness (The Abysmal)** with a changing line in the 5th position, transforming to **Hexagram 13 - Seeking Harmony (Fellowship with Men)**. + +### Key Insights for Your Team's Situation: + +**Current Challenge (Hexagram 29):** +- Your team is facing what the I Ching recognizes as a "repetition of danger" - this suggests you're in a challenging situation that requires careful navigation +- Like water in a ravine, you need to find the natural path forward rather than forcing your way through +- The emphasis is on **sincerity and thoroughness** - whatever decision you make, commit to it fully and execute it properly + +**Strategic Approach:** +1. **Flow Like Water**: Don't try to overcome obstacles through force. Instead, find the path of least resistance that still moves you toward your goal +2. **Fill Every Depression**: Address all the foundational issues before moving forward. Don't skip steps or leave gaps in your planning +3. **Consistency Over Ambition**: The changing line warns against being "too ambitious." Focus on steady, sustainable progress rather than dramatic leaps + +**The Transformation (Hexagram 13):** +The situation naturally evolves toward **Fellowship with Men** - suggesting that the key to resolving your roadmap challenge lies in: +- **Building consensus** among team members +- **Open collaboration** rather than closed-door decisions +- **Crossing the great water** - taking on significant challenges, but doing so together + +### Practical Recommendations: + +1. **Acknowledge the Difficulty**: Don't minimize the complexity of your roadmap decision. Accept that it's genuinely challenging. + +2. **Seek Team Alignment**: The transformation to "Fellowship" suggests your answer lies in bringing the team together rather than having leadership decide alone. + +3. **Take the Conservative Path**: The 5th line specifically advises against overambition. Choose the roadmap option that gets you "out of danger" rather than the most aggressive one. + +4. **Focus on Execution**: Once you decide, commit fully. The hexagram emphasizes that success comes from thorough implementation, not perfect strategy. + +The I Ching suggests this challenging decision will ultimately strengthen your team's unity and collaboration if approached with patience, sincerity, and collective wisdom. \ No newline at end of file diff --git a/documentation/static/servers.json b/documentation/static/servers.json index e228493fc541..078dd175d470 100644 --- a/documentation/static/servers.json +++ b/documentation/static/servers.json @@ -340,6 +340,17 @@ "endorsed": false, "environmentVariables": [] }, + { + "id": "i-ching", + "name": "I Ching", + "description": "I Ching divination readings with Wilhelm-Baynes translation - provides traditional three coins method divination with complete hexagram meanings, judgments, and line interpretations", + "command": "i-ching-mcp-server", + "link": "https://github.com/threemachines/i-ching", + "installation_notes": "Install from crates.io using: cargo install i-ching", + "is_builtin": false, + "endorsed": false, + "environmentVariables": [] + }, { "id": "jetbrains", "name": "JetBrains", diff --git a/ui/desktop/src/components/ExtensionInstallModal.test.tsx b/ui/desktop/src/components/ExtensionInstallModal.test.tsx index ca2d54e567af..9d65635882cd 100644 --- a/ui/desktop/src/components/ExtensionInstallModal.test.tsx +++ b/ui/desktop/src/components/ExtensionInstallModal.test.tsx @@ -94,6 +94,23 @@ describe('ExtensionInstallModal', () => { expect(screen.getAllByRole('button')).toHaveLength(3); }); + + it("should handle i-ching-mcp-server as allowed command", async () => { + mockElectron.getAllowedExtensions.mockResolvedValue([]); + + render(); + + const eventHandler = getAddExtensionEventHandler(); + + await act(async () => { + await eventHandler({}, "goose://extension?cmd=i-ching-mcp-server&id=i-ching&name=I%20Ching&description=I%20Ching%20divination"); + }); + + expect(screen.getByRole("dialog")).toBeInTheDocument(); + expect(screen.getByText("Confirm Extension Installation")).toBeInTheDocument(); + expect(screen.getByText(/I Ching extension/)).toBeInTheDocument(); + expect(screen.getAllByRole("button")).toHaveLength(3); + }); it('should handle blocked extension', async () => { mockElectron.getAllowedExtensions.mockResolvedValue(['uvx allowed-package']); diff --git a/ui/desktop/src/components/settings/extensions/deeplink.ts b/ui/desktop/src/components/settings/extensions/deeplink.ts index 9b0060a014e2..79ff7d96ea4a 100644 --- a/ui/desktop/src/components/settings/extensions/deeplink.ts +++ b/ui/desktop/src/components/settings/extensions/deeplink.ts @@ -14,7 +14,7 @@ function getStdioConfig( timeout: number ) { // Validate that the command is one of the allowed commands - const allowedCommands = ['cu', 'docker', 'jbang', 'npx', 'uvx', 'goosed', 'npx.cmd']; + const allowedCommands = ['cu', 'docker', 'jbang', 'npx', 'uvx', 'goosed', 'npx.cmd', 'i-ching-mcp-server']; if (!allowedCommands.includes(cmd)) { toastService.handleError( 'Invalid Command',