I use AI tools a lot when I write code.
And I keep seeing the same annoying pattern.
You open a new chat and start with:
Here is the project context...
Then you paste the README.
Then some API docs.
Then one file.
Then another file.
Then you explain the part that is not in the docs.
Then you say:
Important: ignore the old service, we don't use it anymore.
The model answers.
It is almost right.
But not really.
So you paste more context.
And tomorrow you do the same thing again.
At some point, this stops being “AI assistance” and becomes manual context babysitting.
The usual workflow looks like this
Developer
|
v
Copy README
|
v
Copy docs
|
v
Copy code files
|
v
Explain architecture
|
v
Correct outdated assumptions
|
v
Ask the actual question
This works for one small task.
But it does not scale.
A chat window is not a project memory. It is just a temporary place where we throw text and hope the model understands enough.
Project context is usually scattered
In a real project, context lives everywhere.
| Context | Where it usually lives |
|---|---|
| Setup instructions | README |
| API behavior | docs or code |
| Architecture decisions | old tickets, Slack, Notion |
| Deprecated logic | someone's memory |
| Database structure | migrations |
| Business rules | code, comments, support cases |
| Deployment details | CI/CD config |
| Edge cases | production bugs |
When we paste only part of this into a chat, the model gets only part of the story.
And then it guesses.
Sometimes the guess is useful.
Sometimes it creates more work.
The model is not always the problem
It is easy to blame the model.
“GPT failed.”
“Claude missed the point.”
“The coding agent is dumb.”
But many times the model did exactly what we asked.
We gave it incomplete context.
For example:
Question:
How should I add a new payment provider?
To answer this properly, the model needs to know things like:
- Is there already a payment abstraction?
- Are providers stored in config or database?
- How are webhooks handled?
- Are payments async?
- What should be logged?
- What should never be logged?
- Are there old providers that should not be copied?
- Are there tests?
Without that, the model will still answer.
That is the dangerous part.
It will answer confidently from partial context.
Copy-paste context also gets stale
Another problem is context drift.
Your README says one thing.
Your code does another thing.
Your old docs describe a service that was removed six months ago.
A ticket contains the real decision, but nobody moved it to documentation.
So the chat context becomes a random mix of truth, old truth, and maybe-truth.
Something like this:
Project context in chat
|
|-- README
| status: mostly correct
|
|-- old API docs
| status: partly outdated
|
|-- copied code file
| status: correct
|
|-- architecture note
| status: old
|
|-- developer explanation
| status: correct but temporary
|
|-- missing edge cases
status: unknown
No wonder the model gets confused.
Bigger context windows do not fully solve this
Yes, larger context windows help.
You can paste more.
You can include more files.
You can dump more docs.
But “more text” is not the same as “better context”.
A simple mental chart:
Usefulness
^
| clean, structured context
| /
| /
| /
| /
| /
| / giant copy-paste dump
| /
+---------------------------------> Amount of text
At some point, more pasted text becomes noise.
The model does not need everything.
It needs the right thing at the right moment.
A better pattern: reusable project context
Instead of pasting project context again and again, I think we need to treat project context as something reusable.
Not like this:
Every chat starts from zero
But like this:
AI chat / agent
|
v
Project context layer
|
|-- repository knowledge
|-- docs
|-- architecture rules
|-- API examples
|-- internal tools
|-- deprecated things to avoid
Then the agent can use the project context when it needs it.
The developer should not have to explain the same project every day.
What this could look like
Imagine a simple project context file.
Not perfect. Not magic. Just structured.
project:
name: billing-api
stack:
- Laravel
- MySQL
- Redis
- Queue workers
rules:
- Never log full payment payloads
- Webhooks must be idempotent
- New providers must implement PaymentProviderInterface
- OldStripeService is deprecated, do not copy it
important_paths:
- app/Payments
- app/Http/Controllers/WebhookController.php
- database/migrations
- tests/Feature/Payments
common_tasks:
add_payment_provider:
read_first:
- app/Payments/PaymentProviderInterface.php
- app/Payments/StripeProvider.php
- tests/Feature/Payments
This is much better than pasting random files into chat.
The point is not this exact YAML format.
The point is that project knowledge should have structure.
This is where MCP becomes useful
MCP gives AI clients a standard way to connect to external tools and context.
So instead of dumping everything into the prompt, we can expose useful project context through an MCP server.
For example, an MCP server for a project could provide tools like:
{
"name": "search_project_docs",
"description": "Search approved project documentation and architecture notes.",
"input": {
"query": "string"
}
}
Or:
{
"name": "get_project_rule",
"description": "Returns internal development rules for a specific area.",
"input": {
"area": {
"type": "string",
"enum": ["payments", "auth", "deployments", "database"]
}
}
}
Or:
{
"name": "find_relevant_files",
"description": "Finds important repository files for a development task.",
"input": {
"task": "string"
}
}
Now the agent does not need the whole project pasted into the chat.
It can ask for the right piece of context.
But “connect everything” is also a trap
There is another mistake.
People connect all docs, all tools, all APIs, all repositories, and all tickets.
Then they expect the agent to figure it out.
That can become another kind of mess.
Bad setup:
AI agent
|
|-- 200 tools
|-- 10 repositories
|-- 5 documentation spaces
|-- old tickets
|-- random notes
|-- internal APIs with unclear names
This is not much better than copy-pasting.
It is just automated noise.
A better setup is smaller and cleaner:
Better setup:
AI agent
|
|-- search approved docs
|-- inspect repository knowledge
|-- read architecture rules
|-- find relevant files
|-- use a few clear project tools
The goal is not to give the model everything.
The goal is to give it a good surface.
Tool names matter more than they look
This is bad tool design:
{
"name": "get_data",
"description": "Gets data",
"input": {
"type": "string"
}
}
The model has to guess everything.
What data?
From where?
For what use case?
What should the input look like?
This is better:
{
"name": "search_billing_docs",
"description": "Searches approved billing documentation. Use this before changing payment provider logic.",
"input": {
"query": "string"
}
}
Still simple.
But now the model has a much better chance of using it correctly.
This is why I think tool design is becoming part of developer experience.
We are no longer designing only for humans.
We are also designing for models.
Local context is fine until a team needs it
For one developer, local setup is okay.
You run a local MCP server.
You connect it to your AI client.
You add some tools.
It works.
But in a team, this gets messy fast.
| Problem | What happens |
|---|---|
| Different local configs | AI answers differ between developers |
| No versioning | Tool changes break workflows |
| No shared testing | Nobody knows if the agent uses tools correctly |
| Old docs included | The model learns the wrong thing |
| Too many tools | The agent chooses poorly |
This is where project context starts to look like infrastructure.
It needs to be shared.
It needs to be tested.
It needs to be versioned.
It needs to be maintained.
This is why I am building Vectoralix
I am building Vectoralix because I think AI agents need better project context, not just bigger prompts.
Vectoralix is a platform for creating, testing, versioning, and hosting MCP servers and knowledge sources for AI agents.
The workflow I want is simple:
Import repository
|
v
Add project knowledge
|
v
Create clear MCP tools
|
v
Test in playground
|
v
Publish stable MCP endpoint
|
v
Use it from AI clients
The playground part is important.
A tool can be technically valid and still bad for an agent.
The name may be unclear.
The response may be too large.
The schema may be too open.
The model may choose it at the wrong time.
So I do not think MCP should be “deploy first, debug later”.
It should be tested before it becomes part of a real workflow.
The real goal
The goal is not to replace developers.
The goal is much smaller and more practical.
Stop explaining the same project again and again.
Stop pasting the same README.
Stop saying “ignore that old file” every day.
Stop asking the model to guess from partial context.
A good AI workflow should feel more like this:
Developer:
"Add a new payment provider."
Agent:
"I found the payment interface, current provider, webhook rules,
and tests. I will follow the existing pattern and avoid the deprecated service."
That is the kind of workflow I want.
Not magic.
Just less repetitive explaining.
Final thought
Copy-pasting project context into AI chats is okay for quick tasks.
But if you do it every day, it is probably a sign.
Your project context is not reusable yet.
The next step for AI coding is not only better models.
It is better context infrastructure.
Cleaner project knowledge.
Better MCP servers.
Smaller and clearer tools.
Less guessing.
More useful agents.
Top comments (0)