Skip to content

Contributing

Jai Rajput edited this page Jul 3, 2026 · 1 revision

Contributing

Contributions are welcome! Whether you're fixing a bug, adding a new tool, improving docs, or sharing ideas — every PR is appreciated.

Ways to Contribute

Easy wins

  • Fix typos in documentation
  • Improve error messages
  • Add examples to the wiki

Medium effort

  • Add tests with mock API responses
  • Improve input validation on tools
  • Add support for new Groww API endpoints as they become available

Feature ideas

  • Mutual fund tools (SIP, redemption, NAV lookup)
  • Portfolio analytics (sector allocation, diversification score)
  • Alert/notification tools
  • Multi-account support
  • WebSocket streaming for real-time data

Development Setup

git clone https://github.com/developerjai/groww-mcp.git
cd groww-mcp
bundle install
cp .env.example .env
# Add your Groww credentials to .env

Adding a New Tool

  1. Choose the right file in lib/groww_mcp/tools/ or create a new one
  2. Add the API endpoint to lib/groww_mcp/client.rb if needed
  3. Create the tool class inheriting from GrowwMcp::BaseTool
  4. Register it in lib/groww_mcp.rbALL_TOOLS array
  5. Document it in README.md and this wiki

Tool template

class YourTool < GrowwMcp::BaseTool
  description "Clear description of what this tool does"

  input_schema(
    properties: {
      param_name: {
        type: "string",
        description: "What this parameter is for",
      },
    },
    required: ["param_name"],
  )

  class << self
    def call(server_context:, param_name:)
      client = server_context[:client]
      result = client.your_api_method(param_name)
      format_response(result)
    rescue GrowwMcp::ApiError => e
      error_response(e)
    end
  end
end

Pull Request Guidelines

  • One feature per PR — makes review easier
  • Follow existing code patterns — consistency matters
  • Test against the live API if possible
  • Update docs for any new or changed tools
  • Write a clear description — explain what changed and why

Branch Protection

The main branch is protected:

  • All changes go through pull requests
  • At least 1 approving review required
  • Stale reviews are dismissed on new pushes
  • Conversations must be resolved before merge

Questions?

Open a GitHub Discussion or reach out to @developerjai.

Clone this wiki locally