About Norti

Making a financial decision is rarely just about knowing the current price of an asset. It requires understanding your own financial situation, knowing what you are trying to achieve, evaluating what you already own, and having enough knowledge to understand the risks behind a decision.

That is what inspired us to build Norti: a financial companion designed to connect personal financial context, investment information, and financial education in one experience.

Norti starts with the person. It can work with a user's financial profile, financial goals, portfolio, holdings, and assets to build a picture of their current situation. It then combines that context with real market information from Twelve Data, allowing the platform to provide more relevant investment-oriented analysis instead of relying only on static financial information.

But we did not want to build another system that simply tells people what to invest in.

We wanted Norti to help users understand why a financial decision might make sense.

This led us to a second fundamental part of the project: education. Norti can connect a user's financial situation and investment questions with concepts they may need to understand, turning a recommendation into an opportunity to learn. The goal is to move from "What should I do?" toward "Why does this make sense, and what should I understand before deciding?"

Building Norti

The core of Norti was built as a Laravel application with a modular architecture separating financial logic, market data, and AI interaction.

Our financial domain represents users, financial profiles, goals, portfolios, holdings, and assets. Financial operations are handled through dedicated services rather than being embedded directly into the AI layer.

For market information, we integrated Twelve Data through a provider abstraction. This allows Norti to retrieve real market information while keeping the rest of the application independent from the specific data provider.

The most important architectural decision came from our use of the Model Context Protocol (MCP).

Rather than giving an AI model direct access to our database or external financial APIs, we expose controlled financial capabilities through MCP tools. An AI agent can discover those capabilities and decide which one is appropriate for a user's request.

The resulting flow is:

User
 ↓
Norti AI Agent
 ↓
MCP Tool Selection
 ↓
Norti MCP Server
 ↓
Financial Services
 ↓
Financial Data / Market Data
 ↓
Structured Result
 ↓
AI Interpretation
 ↓
User

We integrated the OpenAI API through Laravel's AI SDK to power the agent experience. This allows the model to interpret natural-language questions, select the appropriate MCP tool, and explain the resulting information to the user.

For example, when a user asks about an asset, the model can determine that it needs current market information, invoke the corresponding MCP tool, retrieve real data through Twelve Data, and then explain the result in natural language.

The important part is that the AI does not perform the financial operations itself. The application remains responsible for retrieving data, applying business rules, and producing structured results.

What we learned

One of our biggest lessons was that building an AI-powered application is not simply about connecting an LLM to a database.

The quality of the system depends heavily on what capabilities the AI is allowed to use and how those capabilities are exposed.

Working with MCP showed us how an AI agent can interact with an application through clearly defined capabilities rather than being given unrestricted access to the underlying system. This separation also made our architecture easier to reason about and test.

We also learned the importance of keeping deterministic operations separate from generative AI. Calculations, financial rules, validation, and market-data retrieval belong to the application; interpretation, explanation, and natural-language interaction are where the AI provides value.

Another important lesson was the value of designing for provider independence. Our market-data layer does not depend directly on Twelve Data, and our AI architecture does not need to be conceptually tied to a single model provider. This gives Norti room to evolve without rebuilding its core financial logic.

Challenges

One of our main challenges was connecting several technologies while keeping the architecture understandable.

We had to integrate:

  • a financial domain and relational data model;
  • Laravel application services;
  • an external market-data provider;
  • an MCP server;
  • an MCP client;
  • an AI agent;
  • and the OpenAI API.

Getting each component to work independently was only part of the challenge. We also needed to make sure they worked together without allowing one layer to take responsibilities that belonged to another.

MCP presented another learning curve. We initially approached it as a way to expose functions to an AI, but we learned that its real value in Norti comes from interoperability: the AI does not need to know how our financial services or market-data infrastructure are implemented. It only needs to understand the capabilities exposed through the protocol.

Finally, we had to balance ambition with the limited scope of a hackathon. A real financial platform would involve significantly more infrastructure, security, regulatory requirements, and integrations. We therefore deliberately focused Norti on financial intelligence, investment-oriented analysis, and education rather than real-money transactions or autonomous trading.

Where Norti is today

We now have an end-to-end prototype in which a user can interact with an AI agent, the agent can autonomously select an appropriate MCP tool, that tool can invoke Norti's financial logic, real market data can be retrieved through Twelve Data, and the resulting information can be returned to the AI for natural-language interpretation.

For us, Norti is ultimately about combining financial context, market information, artificial intelligence, and education without taking the decision away from the person.

We want technology to make financial information more understandable, not simply make financial decisions on someone's behalf.

Built With

Share this project:

Updates

Submission history