TL;DR: We built a voice interface for xAI's Grok that never forgets who you are. MCPaaS delivers project context to every conversation. No re-explaining. No drift. Just talk.
The Challenge
Voice interfaces have a memory problem.
You talk to an AI assistant. It helps you. Conversation ends. Next time you talk, it has no idea who you are, what you're working on, or what you discussed before.
For a demo we were building with xAI's Grok API, this was unacceptable. We wanted to prove that AI voice could be persistentโthat context could survive across sessions, platforms, and time.
The Requirements
- Browser-based voice interface (no app install)
- Direct connection to xAI's Grok API
- Persistent project context across sessions
- Zero re-explaining required
- Works with any project that has a
.faffile
The Solution: FAF-Voice + MCPaaS
FAF-Voice is a browser-to-xAI voice client. You speak, Grok responds. But unlike typical voice assistants, Grok knows your project before you say a word.
The secret: MCPaaS.
When you start a FAF-Voice session, the client fetches your project context from MCPaaS. Grok receives your .faf file as part of the system prompt. Every conversation starts with full context.
The Demo: Three Acts
We structured the demo as a three-act proof:
Baseline Pain
Standard voice assistant. No context. Watch the AI ask "What project are you working on?" over and over. Experience the frustration firsthand.
.faf Activation
Connect MCPaaS. Load the project context. The AI now knows: stack, architecture, team, goals. Ask anythingโno preamble required.
Eternal Voice
Close the browser. Open it again. Different device. Same context. The AI remembers. That's eternal memory.
How It Works
1. Context Loading
When FAF-Voice initializes, it calls MCPaaS to retrieve project context:
// Fetch context from MCPaaS
const context = await fetch('https://mcpaas.live/api/context', {
method: 'POST',
headers: { 'Authorization': 'Bearer ' + token },
body: JSON.stringify({ project_id: 'faf-voice' })
});
const { faf, score, tier } = await context.json();
// score: 94, tier: "gold"2. System Prompt Injection
The .faf content becomes part of Grok's system prompt:
const systemPrompt = `
You are a voice assistant with full project context.
PROJECT CONTEXT:
${faf}
You know this project intimately. Never ask the user to
re-explain their stack, goals, or architecture. Just help.
`;3. Voice Streaming
xAI's Grok API handles voice with the "Leo" voice model. Responses stream back in real-time:
const response = await xai.chat.completions.create({
model: 'grok-2-voice',
voice: 'Leo',
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: userSpeech }
],
stream: true
});The Results
What We Learned
Context is Infrastructure
Treating context as an endpoint (not a chat artifact) changes everything. MCPaaS made this possible without building custom persistence logic.
Voice Needs Memory
Voice interfaces are even more frustrating without context than text. You can't paste a README into a microphone. Persistent context is essential.
Edge Delivery Matters
Voice is real-time. Any latency in context loading is noticeable. MCPaaS's sub-millisecond edge delivery made the experience seamless.
The .faf Format Works
Grok understood the .faf structure immediately. Project, stack, human_contextโall parsed and applied correctly. The format is AI-native by design.
Try It Yourself
FAF-Voice is open source. You can run it locally or deploy your own instance.
Prerequisites
- xAI API key (for Grok access)
- A
.faffile for your project - MCPaaS account (or self-host)
Quick Start
# Clone the repo
git clone https://github.com/Wolfe-Jam/FAF-Voice
# Install dependencies
npm install
# Set environment variables
export XAI_API_KEY=your_key
export MCPAAS_TOKEN=your_token
# Run locally
npm run devWhat's Next
FAF-Voice is a proof of concept. We're exploring:
- Multi-model support โ Claude, GPT-4, Gemini with the same context layer
- Conversation history โ MCPaaS storing conversation summaries
- Team voices โ Shared project context across team members
- Mobile apps โ iOS/Android with persistent context
The core insight remains: context should be an endpoint, not a session artifact. MCPaaS makes that possible.