Made Open

Setting Up Real Credentials

This guide walks through connecting each supported integration to Made Open using real credentials.

Prerequisites

  • Made Open hub running locally (pnpm hub) or deployed
  • Supabase running locally (supabase start) or a hosted Supabase project
  • Web app running (pnpm web) — Settings page at http://localhost:3000/settings

Twilio (Voice + SMS)

Twilio uses manual credential entry (Account SID + Auth Token). Twilio is currently the only integration whose domains are wired into the hub's capability manifest (TWILIO_MANIFEST in @made-open/shared), so connecting Twilio is what drives GET /api/capabilities to return active voice/SMS/video domains.

  1. Create a Twilio account at twilio.com
  2. From the Twilio Console, copy your Account SID and Auth Token
  3. Buy a phone number ($1/month) — ensure it's SMS and voice-capable
  4. In Made Open: open Settings, find the Twilio credential card, click Connect
  5. Enter Account SID, Auth Token, and Phone Number — these map to the credential fields accountSid, authToken, phoneNumber required by the manifest
  6. Verify: the Twilio card shows "Connected" and capabilities like "Voice Calls" and "SMS Messaging" appear active on the Dashboard
  7. Test: Make a call or send SMS from the Calls or Conversations page

Microsoft 365 (Contacts + Calendar + Email + OneDrive + Tasks)

Microsoft 365 uses OAuth — click "Connect" and sign in with your Microsoft account.

Azure AD App Registration (one-time setup)

  1. Go to portal.azure.comAzure Active DirectoryApp registrationsNew registration
  2. Name: Made Open (or any name)
  3. Supported account types: Single tenant (or multi-tenant if needed)
  4. Redirect URI: http://localhost:4101/api/oauth/microsoft/callback (Web platform)
  5. Click Register

Configure API Permissions

  1. In your app registration → API permissionsAdd a permissionMicrosoft GraphDelegated permissions
  2. Add these delegated permissions (matches the scopes requested by apps/hub/src/api/routes/microsoftOAuth.ts):
    • User.Read
    • Contacts.Read
    • Calendars.Read
    • Mail.Read
    • Mail.ReadWrite
    • Mail.Send
    • MailboxSettings.ReadWrite
    • Files.Read
    • Tasks.Read
    • offline_access
  3. Click Grant admin consent (requires admin role)

Create Client Secret

  1. Go to Certificates & secretsNew client secret
  2. Set a description and expiry (e.g., 24 months)
  3. Copy the Value immediately — it's only shown once

Configure Hub Environment

Add to your .env file (or set environment variables):

MICROSOFT_CLIENT_ID=<your-app-client-id>
MICROSOFT_CLIENT_SECRET=<your-client-secret-value>
MICROSOFT_REDIRECT_URI=http://localhost:4101/api/oauth/microsoft/callback
MICROSOFT_TENANT_ID=<your-tenant-id>  # or 'common' for multi-tenant

Connect in Made Open

  1. Start the hub: pnpm hub
  2. Open Settings at http://localhost:3000/settings
  3. Click Connect on the Microsoft 365 card — this hits /api/oauth/microsoft/authorize
  4. Sign in with your Microsoft account and approve permissions
  5. You'll be redirected back to Settings with ?connected=microsoft365 and a success message

Note: at HEAD, Microsoft 365 is stored in the credential wallet and exposed via the settings UI's CAPABILITY_REGISTRY, but the hub's manifest-based capability filter (/api/capabilities) currently only activates Twilio domains. Contact sync and other Microsoft 365 features still run via the ms-graph connector plugin.

Verify

  • Contacts appear on the Contacts page within 15 minutes (connector syncs every 15min)
  • Calendar events appear on the Calendar page
  • Emails appear in Conversations
  • OneDrive files sync to Documents
  • To Do tasks sync to your task list

OpenRouter (AI Chat)

OpenRouter uses manual API key entry. Field key: apiKey.

  1. Create an account at openrouter.ai
  2. Go to KeysCreate Key
  3. Copy the API key (starts with sk-or-v1-)
  4. In Made Open: open Settings, click Connect on the OpenRouter card
  5. Paste the API key into the API Key field
  6. Verify: AI Assistant page shows model responses

Ollama (Local AI)

Ollama provides local AI inference — no API key needed, just a URL.

  1. Install Ollama from ollama.com/download
  2. Pull a model: ollama pull llama3.2
  3. Ollama runs on http://localhost:11434 by default
  4. In Made Open: open Settings, click Connect on the Ollama card
  5. Enter the Base URL (field key baseUrl) — default is http://localhost:11434
  6. Verify: AI queries route to your local model when OpenRouter is not configured

Troubleshooting

ProblemSolution
"Token expired" errorRe-authorize Microsoft 365 in Settings — tokens refresh automatically, but the refresh token itself can expire after 90 days of inactivity
Contacts not syncingCheck hub logs for connector errors. Verify Contacts.Read permission was granted and admin consent was given
Calendar events missingEnsure Calendars.Read permission is granted. The connector syncs events within a 90-day window
SMS not sendingVerify your Twilio phone number is SMS-capable (check in Twilio Console)
OAuth redirect failsEnsure MICROSOFT_REDIRECT_URI matches exactly what's configured in Azure AD (including port)
"Invalid client" errorDouble-check MICROSOFT_CLIENT_ID and MICROSOFT_CLIENT_SECRET in your .env file
OneDrive files not appearingEnsure Files.Read permission is granted. Only recently modified files are synced
AI not respondingCheck that your OpenRouter API key is valid and has credits, or that Ollama is running locally