Automated life, liberate you!
Ally is a customizable AI assistant that can be used in both professional and private environments to increase productivity and simplify complex tasks. The application features a classic, user-friendly interface with an input field, a task list, and a context area – just as you'd expect from modern generative AI apps.
In today's technological landscape, many companies face a dual challenge:
- Technology Skepticism: Employees often have concerns or feel overwhelmed about effectively using new AI technologies.
- Data Protection & Security: The unregulated use of external AI tools poses risks to intellectual property and compliance with data protection regulations like GDPR.
Ally solves these problems by providing a secure, centralized, and user-friendly AI platform. It lowers the entry barrier for employees and gives companies back control over their data, as data protection and processing within the EU are guaranteed.
Ally serves as a central hub for a variety of tasks, increasing efficiency in daily work.
- ✨ Personalized Assistance: Ally stores preferences and information to deliver tailor-made responses.
- 📄 Document Management:
- Search: Answers detailed questions about uploaded documents (PDF, Word, etc.).
- Summarize: Extracts the most important information from long texts.
- Compare: Highlights differences and similarities between two documents.
- 🖼️ Image Analysis: Identifies and describes content, patterns, and objects in images.
- 🌐 Web Interaction:
- Analyze Webpages: Extracts and processes content directly from a URL.
- Web Search: Conducts internet research and integrates the results directly into tasks.
- Perplexity Research: Advanced AI-powered research capabilities for comprehensive information gathering.
- ✅ Task Management: Creates and manages to-do lists and reminds you of due tasks.
- 🚀 Microsoft Teams Integration: Ally can be embedded as a tab application in Microsoft Teams and supports Single Sign-On (SSO) for a seamless login experience.
- 🔒 Private Mode: Ally supports a private mode where all data is stored in a separate database collection, enabling a strict separation between business and private data.
- 🛡️ Data Privacy Option: In the settings, data processing and storage can be restricted to the EU. Note: Not all features may be available when processing is exclusively within the EU.
- 📊 Statistics Page: Ally offers a dedicated page for statistics – for both private and business modes. This gives users and admins a transparent overview of usage and activities.
- 🔧 MCP Integration: Ally supports the Model Context Protocol (MCP) for extending capabilities with external tools and services, providing seamless integration with third-party APIs and services.
Ally is built on a modern and robust technology stack:
- Framework: Next.js
- Language: TypeScript
- Database & ORM: MongoDB with Prisma
- Authentication: Auth0
- UI: Material-UI (MUI)
- AI & LLMs: LangChain, Vercel AI SDK
- Cloud Services: AWS (S3 for Storage), Azure (OpenAI Services)
- Tool Integration: Model Context Protocol (MCP) for external tool connectivity
Follow these steps to set up and run Ally on your local machine.
- Node.js (Version 18 or higher)
- Yarn as package manager
- Access to a MongoDB database
- API keys for the required services
git clone https://github.com/fellowork/ally-app.git
cd ally-appyarn installCopy the .env.example file to a new file named .env.local and fill in the required values.
cp env.example .env.localYou will need to configure the following environment variables:
MONGODB_URI: Your connection string to the MongoDB database.JWT_SECRET: A self-generated, secure password (secret) for creating JWTs for internal API authentication.
AUTH0_SECRET: A long, unpredictable secret for Auth0 session encryption.AUTH0_BASE_URL: Your application's base URL (e.g., https://localhost:3000 for development).AUTH0_ISSUER_BASE_URL: Your Auth0 domain URL (e.g., https://your-domain.auth0.com).AUTH0_CLIENT_ID: Your Auth0 application client ID.AUTH0_CLIENT_SECRET: Your Auth0 application client secret.
AZURE_AI_API_KEY: Your Azure OpenAI API key.AZURE_OPENAI_ENDPOINT: Your Azure OpenAI endpoint URL.AZURE_OPENAI_API_VERSION: API version (e.g., 2025-01-01-preview).AZURE_OPENAI_API_INSTANCE_NAME: Your Azure OpenAI instance name.AZURE_OPENAI_GPT4_DEPLOYMENT_NAME: Deployment name for GPT-4.AZURE_OPENAI_GPT4_MINI_DEPLOYMENT_NAME: Deployment name for GPT-4 Mini.AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME: Deployment name for embeddings.AZURE_OPENAI_EMBEDDINGS_API_VERSION: API version for embeddings (e.g., 2023-05-15).AZURE_OPENAI_WHISPER_DEPLOYMENT_NAME: Deployment name for Whisper.AZURE_OPENAI_WHISPER_API_VERSION: API version for Whisper (e.g., 2024-06-01).
BRAVE_API_KEY: API key from Brave Search for the web search feature.PERPLEXITY_API_KEY: API key from Perplexity for the research features.
AWS_ACCESS_KEY_ID: Your AWS access key ID.AWS_SECRET_ACCESS_KEY: Your AWS secret access key.AWS_REGION: Your AWS region (e.g., us-east-1, eu-west-1).BUCKET_NAME: Base name for your S3 buckets (without -business/-private suffix)FROM_ADDRESS: Your sender support email address (for feedback emails).SUPPORT_ADDRESS: Your destination email address for support requests.
IMPRINT_URL: URL for your impressum/imprint page.PRIVACY_URL: URL for your privacy policy page.TERMS_URL: URL for your terms of service page.WEBSITE_URL: URL for your main website.GITHUB_URL: URL for your GitHub repository.
AZURE_CLIENT_ID: Azure App Registration client ID for Teams SSO.AZURE_CLIENT_SECRET: Azure App Registration client secret for Teams SSO.
MCP_CONFIG_SECRET: A 64-character hexadecimal string used for encrypting/decrypting MCP configuration data.
Ally requires Azure OpenAI Services to function. Follow these steps to set up your Azure OpenAI instance:
-
Create an Azure OpenAI Resource: Go to the Azure Portal and create an Azure OpenAI resource.
-
Deploy Required Models: In your Azure OpenAI instance, deploy the following models:
- GPT-4 (for main AI conversations)
- GPT-4 Mini (for lighter tasks)
- text-embedding-3-large (for embeddings)
- Whisper (for speech-to-text functionality)
-
Get Your Configuration Values:
AZURE_AI_API_KEY: Found in your Azure OpenAI resource keysAZURE_OPENAI_ENDPOINT: Your Azure OpenAI endpoint URLAZURE_OPENAI_API_INSTANCE_NAME: Your Azure OpenAI instance nameAZURE_OPENAI_GPT4_DEPLOYMENT_NAME: The deployment name you chose for GPT-4AZURE_OPENAI_GPT4_MINI_DEPLOYMENT_NAME: The deployment name you chose for GPT-4 MiniAZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME: The deployment name for text-embedding-3-largeAZURE_OPENAI_WHISPER_DEPLOYMENT_NAME: The deployment name for Whisper
-
Alternative LLM Providers: If you want to use other providers (OpenAI directly, Anthropic, etc.), you'll need to modify the LLM provider factory in
src/modules/ai/llms/LLMProviderFactory.ts.
Ally uses AWS S3 for file storage (documents, images) and AWS SES for email functionality. Follow these steps to set up your AWS services:
-
Create AWS Account: If you don't have one, create an AWS account.
-
Create IAM User: Create an IAM user with programmatic access and the following permissions:
AmazonS3FullAccess(or a custom policy for your specific S3 bucket)AmazonSESFullAccess(for email functionality)
-
Create S3 Buckets: Ally uses separate buckets for business and private data. Create two S3 buckets in your preferred region:
your-bucket-name-business(for businessfiles)your-bucket-name-private(for private files)
-
Configure SES: Set up Amazon SES in your region and verify your sending domain/email addresses.
-
Get Your AWS Configuration:
AWS_ACCESS_KEY_ID: From your IAM userAWS_SECRET_ACCESS_KEY: From your IAM userAWS_REGION: The region where your S3 bucket and SES are configuredBUCKET_NAME: The name of your S3 bucket (without -business/-private suffix)FROM_ADDRESS: Your sender support email addressSUPPORT_ADDRESS: Your destination email address for support requests
Generate the Prisma client required for the database connection.
npx prisma generateNow you can start the application in development mode.
yarn run devThe application should now be accessible at http://localhost:3000.
To use Ally as an application in Microsoft Teams with Single Sign-On (SSO), additional configuration steps are necessary.
-
Azure App Registration & SSO Configuration: You need to create and configure an application registration in the Microsoft Azure Portal for SSO with Teams. The official Microsoft documentation provides detailed instructions for this:
- **Basics: ** Create a basic tab app in Teams
- **SSO Setup: ** Enable SSO for a tab app
-
Environment Variables: Ensure that the optional keys
AZURE_CLIENT_IDandAZURE_CLIENT_SECRETare set in your.envfile (as mentioned in step 4 above).
Ally supports MCP to extend its capabilities with external tools and services. MCP allows you to connect Ally to third-party APIs, seamlessly integrating them into the AI assistant's workflow.
Administrators can manage MCP configurations through a dedicated admin interface that provides:
- User-specific Configuration: Set individual MCP configurations for specific users
- Global Configuration: Apply MCP settings to all users at once
- Secure Storage: All configurations are encrypted and stored securely in the database
- Dynamic Tool Loading: Users only receive tools defined in their configuration when sending messages
- Encryption: All MCP configurations are encrypted using AES-256-GCM before storage
- Environment Variable: The
MCP_CONFIG_SECRETenvironment variable provides the encryption key - Admin-only Access: Only administrators can view and modify MCP configurations
- Secure Key Management: Encryption keys are never stored in the database
MCP configurations follow this JSON structure:
{
"mcpServers": {
"server-name": {
"type": "sse",
"url": "https://api.example.com/mcp/...",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}MCP_CONFIG_SECRET: A 64-character hexadecimal string used for encrypting/decrypting configuration data
The admin interface provides a user-friendly way to manage these configurations without requiring direct database access or manual JSON editing.
Ally is available under a dual license:
- AGPLv3 – For public and open-source use with obligation to disclose source code when making changes.
- Commercial License – For companies that want to use or extend Ally without having to disclose their changes.
For commercial licensing, contact us at: info@fellowork.de
By submitting a contribution to this project (e.g., via Pull Request), you agree to the terms in the CONTRIBUTER.txt file.
Please read this carefully before contributing.