Skip to main content

Prerequisites

Before you begin, ensure you have:

Docker & Docker Compose

Install Docker Desktop or Docker Engine with Compose plugin

OpenAI API Key

Obtain an API key from OpenAI Platform for Harvey and A-MINT services
This quickstart uses Docker Compose to orchestrate all six microservices. For production deployments or custom configurations, see the Installation guide.

Setup Steps

1

Clone the repository

Download the Pricing Intelligence source code:
git clone https://github.com/isa-group/Pricing-Intelligence.git
cd Pricing-Intelligence
2

Configure environment variables

Create environment variables for your OpenAI API keys:
export HARVEY_API_KEY="sk-proj-..."
export AMINT_API_KEY="sk-proj-..."
You can use the same API key for both services or separate keys for better usage tracking.
By default, Harvey uses gpt-5-nano. To change the model, edit docker-compose.yml:
docker-compose.yml
harvey-api:
  environment:
    - OPENAI_MODEL=gpt-4o  # Change to your preferred model
Supported models: gpt-4o, gpt-4-turbo, gpt-3.5-turbo, or any OpenAI-compatible model.
3

Launch the platform

Start all services with a single command:
docker-compose up --build
This will build and start:
  • CSP Service (port 8000): Choco constraint solver
  • Analysis API (port 8002): Pricing analysis engine
  • A-MINT API (port 8001): Pricing data extraction
  • MCP Server (port 8085): Model Context Protocol tools
  • Harvey API (port 8086): AI agent endpoint
  • Frontend (port 80): React chat interface
Wait for all health checks to pass:
# Watch for these messages:
# ✓ choco-api healthy
# ✓ analysis-api healthy
# ✓ a-mint-api healthy
# ✓ mcp-server healthy
# ✓ harvey-api healthy
4

Access the interface

Open your browser to the frontend:
http://localhost
You should see the Harvey chat interface ready to answer pricing questions.

Your First Query

Let’s analyze a real SaaS pricing model. Here are some examples to try:
What plans does Buffer offer and what are their prices?

Step-by-Step Example

Let’s find the optimal Overleaf plan for a team:
1

Enter the URL

In the frontend, provide the pricing page URL in the context field:
https://www.overleaf.com/user/subscription/plans
2

Ask your question

Type a natural language query:
What's the cheapest plan that allows 8 collaborators per project with Git integration?
3

Review the response

Harvey will:
  1. Extract the pricing model using iPricing
  2. Call the optimal tool with your constraints
  3. Return the exact plan with pricing details
Expected response:
{
  "plan": "STANDARD",
  "price": 21,
  "billingCycle": "monthly",
  "features": {
    "gitIntegration": true,
    "maxCollaboratorsPerProject": 11
  }
}

Using the API Directly

You can also interact with Harvey programmatically:
curl -X POST http://localhost:8086/chat \
  -H "Content-Type: application/json" \
  -d '{
    "question": "What is the cheapest plan with SSO?",
    "pricing_url": {
      "id": "github",
      "url": "https://github.com/pricing"
    }
  }'

Service Endpoints

All services expose health check and API endpoints:
ServiceURLHealth Check
Frontendhttp://localhostN/A
Harvey APIhttp://localhost:8086GET /health
MCP Serverhttp://localhost:8085Socket connection test
Analysis APIhttp://localhost:8002GET /health
A-MINT APIhttp://localhost:8001GET /health
CSP Servicehttp://localhost:8000GET /health
The Analysis API also exposes Swagger documentation at http://localhost:8002/docs

Working with YAML Files

You can upload pre-extracted pricing YAML files instead of URLs:
1

Upload a YAML file

curl -F '[email protected];type=application/yaml' \
  http://localhost:8086/upload
Response:
{
  "filename": "overleaf-2023.yaml",
  "relative_path": "/static/overleaf-2023.yaml"
}
2

Query using the uploaded file

curl -X POST http://localhost:8086/chat \
  -H "Content-Type: application/json" \
  -d '{
    "question": "What plans are available?",
    "pricing_yaml": "overleaf-2023.yaml"
  }'
3

Delete uploaded files

curl -X DELETE http://localhost:8086/pricing/overleaf-2023.yaml

Understanding the Workflow

Here’s what happens when you ask a question:
Harvey uses the ReAct pattern to reason about which tools to call and in what order, making multi-step analyses possible.

Troubleshooting

Check that all required ports are available:
# Check if ports are in use
lsof -i :80 -i :8000 -i :8001 -i :8002 -i :8085 -i :8086
Stop any conflicting services or modify port mappings in docker-compose.yml.
Verify your environment variables are set:
echo $HARVEY_API_KEY
echo $AMINT_API_KEY
If empty, export them before running docker-compose up.
Wait 30-60 seconds for all services to fully initialize. View logs:
# View all logs
docker-compose logs

# View specific service
docker-compose logs harvey-api
Check that the Harvey API is reachable from the frontend container:
docker-compose exec mcp-frontend curl http://harvey-api:8086/health
If this fails, ensure the depends_on configuration in docker-compose.yml is correct.

Next Steps

Installation Guide

Learn about development setup, environment variables, and production deployment

Harvey API

Explore the complete Harvey API and chat endpoint

Architecture

Understand the system design and how components interact

MCP Tools

Learn about iPricing, optimal, subscriptions, and other tools

Community & Support

  • GitHub: isa-group/Pricing-Intelligence
  • Issues: Report bugs or request features on GitHub Issues
  • Research Paper: Read the full academic paper for theoretical background

Build docs developers (and LLMs) love