Embedding providers
How to pick and configure an embedding provider for FoundersOS memory. OpenAI is the easiest starting point, with Bedrock and Ollama available if you want to go a different route.
Embeddings power the semantic memory tools. When you store a memory and recall it later with natural language, an embedding model is doing the matching behind the scenes. You need to pick a provider before setup, because the vector dimension is written into your database schema once and can’t be changed without recreating the memory table.
Three providers are supported: OpenAI, AWS Bedrock, and Ollama.
The 30-second version (no jargon)
When FoundersOS stores a memory, it doesn’t just save the text. It also asks an embedding model to turn that text into a long list of numbers, called a vector. Similar meanings produce similar lists, so later your AI can find “what did we decide about pricing?” without you using the exact words you saved it with.
The only technical detail that matters for setup is the dimension: how long that list of numbers is. Each model produces one specific length, and your database column is built to hold exactly that length. A few examples:
| Provider | Default model | Dimension |
|---|---|---|
| OpenAI | text-embedding-3-small | 1536 |
| AWS Bedrock | amazon.nova-2-multimodal-embeddings-v1 | 1024 |
| Ollama | nomic-embed-text | 768 |
Two things follow. First, the dimension belongs to the model, not the provider, so changing models can change the number. Second, every memory in one database must use the same dimension, and the choice is effectively permanent: changing it later means re-embedding everything you’ve stored. That’s why you pick a provider before running setup, and why the setup wizard handles the matching for you.
OpenAI (recommended for most people)
OpenAI is the simplest option. You get an API key, add it to your config, and you’re done. No infrastructure, no local installs.
The default model is text-embedding-3-small at 1536 dimensions. It’s very cheap - embedding thousands of memories costs fractions of a cent. Unless you have a specific reason to use something else, start here.
What you need
- An OpenAI account and API key (get one here)
Config
{
"EMBEDDING_PROVIDER": "openai",
"EMBEDDING_MODEL": "text-embedding-3-small",
"EMBEDDING_DIM": "1536",
"OPENAI_API_KEY": "sk-..."
}
EMBEDDING_MODEL and EMBEDDING_DIM are optional - if you leave them out, the OpenAI defaults above are used automatically.
AWS Bedrock
Bedrock uses the standard AWS credential chain: if you have environment credentials set (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY), it uses those. If you’re running in an AWS environment with an IAM role, it picks that up automatically with no extra config.
The default model is amazon.nova-2-multimodal-embeddings-v1:0 at 1024 dimensions.
What you need
- An AWS account with Bedrock access enabled in your region
- Model access granted for
amazon.nova-2-multimodal-embeddings-v1:0in the Bedrock console (under Model access) - AWS credentials available via one of: environment variables,
~/.aws/credentials, or an IAM role
Config
{
"EMBEDDING_PROVIDER": "bedrock",
"EMBEDDING_MODEL": "amazon.nova-2-multimodal-embeddings-v1:0",
"EMBEDDING_DIM": "1024",
"AWS_DEFAULT_REGION": "us-east-1",
"AWS_ACCESS_KEY_ID": "...",
"AWS_SECRET_ACCESS_KEY": "..."
}
AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are only needed if you’re not using an IAM role or a local AWS profile. If your environment already has credentials configured, you can leave them out.
AWS_DEFAULT_REGION defaults to us-east-1 if omitted. Make sure the region you pick has the Nova embedding model available.
Ollama (local, free)
Ollama runs the embedding model on your own machine. Nothing leaves your computer, there’s no API key, and there’s no per-call cost. The tradeoff is you need Ollama installed and running, and the first setup takes a few extra minutes.
The default model is nomic-embed-text at 768 dimensions.
What you need
- Ollama installed and running locally
- The
nomic-embed-textmodel pulled: runollama pull nomic-embed-textin your terminal
Config
{
"EMBEDDING_PROVIDER": "ollama",
"EMBEDDING_MODEL": "nomic-embed-text",
"EMBEDDING_DIM": "768",
"OLLAMA_BASE_URL": "http://localhost:11434"
}
OLLAMA_BASE_URL defaults to http://localhost:11434 if omitted - that’s the standard Ollama port.
Note: Ollama needs to be running whenever your AI client is running. If you close the Ollama process, memory tools will throw an error until it’s back up.
Picking a provider
| OpenAI | Bedrock | Ollama | |
|---|---|---|---|
| Setup complexity | Minimal | Low if already on AWS | Requires local install |
| Cost | Pay-per-use (very cheap) | AWS pricing (low volume is often free tier) | Free |
| Data leaves your machine | Yes | Yes (to AWS) | No |
| Default dimensions | 1536 | 1024 | 768 |
For most people starting fresh: use OpenAI. It’s the fastest to get running and costs almost nothing at the scale of personal or small team memory usage.
How the dimension gets into your database
The dimension is written into the database schema in two places: the column that stores memory vectors and the search function that compares them. Both must match the model your config uses, or memory storage and search fail outright.
You don’t have to manage this by hand. The setup wizard at foundersmcp.com/setup asks which provider you’re using and then generates a ready-to-run database setup file with the matching dimension already filled in. Run that file once in your Supabase SQL Editor (the wizard walks you through it, Step 1 of the output) and the database and your config can’t disagree.
If you’re setting up manually instead: the canonical setup.sql ships with vector(1024) (the Bedrock default). If you’re using a different dimension, find and replace every vector(1024) in the file with your dimension (for example vector(1536) for OpenAI’s default model) before running it. The wizard does exactly this substitution for you, so the find-and-replace is only needed on the manual path.
Switching providers later
If you do need to switch:
- Export any memories you want to keep (ask your AI: “recall all org memories and list them”)
- In your Supabase SQL Editor, drop the memory objects: the
memoriestable and thematch_memoriesfunction - Open the setup wizard, pick your new provider, and generate the database setup file. From it, run just the Memory section (the
memoriestable, its indexes, and thematch_memoriesfunction) in the SQL Editor. Don’t re-run the whole file on an existing database - the rest of your schema is already in place - Update your MCP config with the new provider, model, and dimension
- Re-store the memories you exported
It’s manual, but it’s straightforward. The memory data itself is just text - only the vectors need to be regenerated.
What’s next?
- Getting started - the full setup walkthrough
- Memory tools - what your AI can do with its memory once this is configured