Connect Attio CRM to Claude with MCP
Use natural language to query and update your Attio CRM through Claude.
Introduction
30 Second Summary
Every sales call generates follow-up admin: notes to log, tasks to create, deal stages to update. That busywork lives across multiple screens and eats into time you could spend actually selling.
In this project, you will connect Claude Desktop to your Attio CRM workspace using Model Context Protocol (MCP). You'll manage deals, contacts, notes, and tasks entirely through natural language conversation.
What You'll Build
You'll type a single message after a sales call, and Claude will log your notes, create follow-up tasks, and update your pipeline stage without you opening a single screen in Attio.
By the end of this project, you'll have:
- A live connection where you ask natural language questions about companies, deals, and contacts and get real-time answers from your CRM data.
- Working write operations that create notes, tasks, and record updates from a Claude conversation, with a safety approval flow on every change.
- A reusable post-call routine that combines CRM reads and writes into a single prompt, turning 5-10 minutes of clicking into one message.
- Secret Mission: A weekly pipeline review workflow that summarizes deals by stage, flags stale opportunities, and auto-generates follow-up tasks.
Are there any prerequisites?
This project assumes you already have an Attio workspace with some data in it, such as companies, contacts, or deals.
A free Attio plan and a free Claude account are all you need.
Before We Start
Before we dive in, let's lock in what you're about to build and why it matters for your day-to-day workflow.
Install Claude Desktop and Connect Attio
To use Claude as your CRM assistant, you need two things in place: Claude Desktop running on your machine, and a live connection between Claude and your Attio workspace.
This step gets both set up. You'll install Claude Desktop, then connect Attio through a simple OAuth flow that requires no API keys or config files.
In this step, get ready to:
- Install Claude Desktop and sign in with your Claude account.
- Connect Attio as a remote MCP connector via OAuth.
- Verify the connection is live in a new conversation.
Download and install Claude Desktop
Claude Desktop is the app that lets you chat with Claude locally on your machine. It supports MCP connectors, which is how you'll wire it to Attio.
- Open your browser and go to claude.ai/download.
- Download the installer for your operating system (macOS or Windows).
- Run the installer and follow the on-screen prompts to complete the installation.
- Open Claude Desktop by pressing Cmd+Space (macOS) or the Windows key (Windows) to open your search bar.
- Type Claude and press Enter to open the app.
- Sign in with your Claude account. A free account works for this project.
Do I need a paid Claude plan?
No. Claude's free plan allows one custom connector, which is all you need for this project. Since you're only connecting Attio, the free plan covers everything.
You should see the Claude Desktop chat interface with an empty conversation ready.
Claude Desktop won't open?
On macOS, you may see a security prompt saying the app is from an unidentified developer. Open System Settings, go to Privacy & Security, and click Open Anyway.
On Windows, if your antivirus flags the installer, allow the exception and re-run the installer.
Help me troubleshoot opening Claude Desktop
Connect Attio as a remote MCP connector
The Model Context Protocol (MCP) is what lets Claude talk directly to external tools like your CRM. Attio provides a hosted MCP server, so the connection happens through a simple OAuth sign-in.
- In Claude Desktop, open Settings.
- Click Connectors.
- Click Browse connectors.
- Search for Attio and click Install.
A browser window opens automatically for the OAuth authorization flow.
- Sign in with the Attio account credentials that belong to your existing workspace.
- Review the permissions Claude is requesting, then click Approve to grant access.
What is OAuth doing here?
OAuth lets Claude access your Attio data without you ever sharing a password or API key. You're granting Claude permission through Attio's own sign-in page, and Attio handles the trust behind the scenes.
This is the same pattern you see when you "Sign in with Google" on other apps.
After approving, the browser shows a confirmation and you can switch back to Claude Desktop.
Browser window didn't open?
Check if your browser blocked a popup. Allow popups from Claude Desktop and try clicking Install again.
If you see a permissions error, make sure you're signing into the Attio account that owns the workspace with your existing data.
Help me connect Attio to Claude Desktop
Verify the connection is live
The connector is installed at the account level, but you still need to confirm it's active for your conversations.
Before you check, what do you expect to see when you open the Connectors panel in a new chat?
- Open a new chat in Claude Desktop.
- Click the + button in the lower-left corner of the message box.
- Select Connectors.
You should see Attio in the list with a green connected status and toggled on for this conversation. This confirms Claude can now reach your live CRM data.
Attio not showing in Connectors?
Go back to Settings > Connectors and confirm Attio is listed there. If it's missing, repeat the Browse connectors flow from the previous substep.
If Attio appears in Settings but not in your chat's Connectors panel, try closing and reopening Claude Desktop.
Help me get Attio showing in my Claude chat
Your AI-powered CRM assistant is wired up. Next, you'll put that connection to work by pulling your live CRM data into a Claude conversation.
Query Your Live CRM Data
Your Attio connection is live. Now it's time to put it to work and see real CRM data flowing back into a conversation.
Instead of clicking through multiple Attio screens to find information, you'll type a plain English question and get your live data back instantly. This step proves the connection works and shows the immediate value of MCP for everyday CRM lookups.
In this step, get ready to:
- Query your companies through a natural language prompt.
- Look up detailed information on a specific record.
- Explore your workspace lists and pipeline structure.
Ask Claude to list your companies
Your first query is the moment of truth. You'll ask Claude a simple question and it will call Attio's MCP tools behind the scenes to return your live workspace data.
Before you send this prompt, what do you expect to see? Think about which companies exist in your Attio workspace right now.
- In your Claude Desktop chat (with Attio toggled on), type the following prompt and press Enter:
List the companies in my Attio CRM
Claude responds with a list of real company names from your workspace. You should recognize the companies it returns.
What just happened?
When you sent that prompt, Claude identified that it needed data from Attio and called the list-records MCP tool automatically. The tool queried your Attio workspace and returned the results directly into the conversation.
You didn't write any code or configure any API calls. Claude figured out which tool to use based on your natural language question.
Not seeing any companies?
Make sure Attio is toggled on for this conversation. Click the + button in the lower-left of the message box, select Connectors, and confirm Attio is enabled.
If Attio is toggled on but Claude says it cannot access your data, your OAuth session may have expired. Go to Settings, then Connectors, disconnect Attio, and reconnect it.
Help me troubleshoot why Claude can't see my Attio companies.
Look up a specific record
A flat list of companies is a good start. The real power shows when you drill into a specific record and pull back its full context in one shot.
- Pick a company or contact you know exists in your Attio workspace.
- Ask Claude for detailed information about that record by sending a prompt like this:
What do we know about [[COMPANY_NAME="a company name from your Attio workspace"]]?
Claude returns detailed information about that record, including attributes, linked contacts, and recent activity.
How does Claude find a specific record?
For this query, Claude uses the search-records tool. This performs a full-text search across your records by name, email, domain, or other indexed attributes. It matches names, domains, emails, phone numbers, and social handles on people and companies.
The response includes everything Attio knows about that record: custom attributes, linked records from other objects, and any recent activity logged against it.
Explore your lists and pipeline
Attio organizes records into lists (like a deals pipeline or a hiring tracker). Knowing what lists exist in your workspace tells you how your team has structured the CRM.
- Ask Claude what lists are available in your workspace by sending:
What lists do we have in Attio?
Claude returns the names of your workspace lists. You should see your deals pipeline and any other lists your team has created.
- Now drill into a specific list. Pick a deals list or pipeline from the results above and ask Claude to show its entries:
Show me all entries in [[LIST_NAME="the name of a deals list from the results above"]]
Before you send this, what do you expect to see? Think about the deals or entries you know are in that list.
Claude returns the entries in that list, including pipeline stages, record details, and entry attributes in a readable format. You should recognize real deal names and stages from your workspace.
What tools did Claude use here?
The first prompt ("What lists do we have?") triggered the list-lists tool, which returns all lists in your workspace. The second prompt triggered the list-records-in-list tool, which returns entries for a specific list along with their stages and attributes.
All of these are read operations. They execute instantly with no approval needed from you.
Claude says you have no lists?
Lists in Attio must be created through the Attio UI first. MCP cannot create workspace schema (objects, attributes, or list structures). If you see no lists, open Attio in your browser and confirm you have at least one list set up.
Help me understand why Claude says I have no lists in Attio.
You just pulled live CRM data from your Attio workspace using nothing but plain English questions. Every query ran instantly with no approval prompts because these are all read operations.
Next up, you'll discover that not all prompts are created equal. A vague question gets a vague answer. You'll learn how to craft prompts that unlock the full power of these MCP tools.
Hit the Limits of Vague Prompts
You've confirmed that Claude can pull live data from your Attio workspace. Companies, contacts, deals, pipeline entries. The connection works.
But not all prompts are created equal. The depth and usefulness of what Claude returns depends entirely on how you phrase your question. In this step, you'll discover that gap firsthand by running a vague prompt, then rewriting it with precision.
In this step, get ready to:
- Try a broad prompt and observe the flat response.
- Rewrite the same question with specific constraints and compare results.
- Chain multiple tools together in a single query for a complete briefing.
Try a vague prompt and notice the result
You've been asking Claude direct questions about your CRM data. Now try something broad and open-ended to see what comes back.
- In your Claude Desktop chat, think for a moment: if you ask a broad, unstructured question about your pipeline, what kind of answer do you expect? Will Claude give you actionable insights, or just raw data?
- Send a vague prompt like this:
Tell me about my deals
Claude returns a flat list of your deals. The data is correct, but there's no prioritization, no filtering, and no insight. It's a dump of everything with no structure to help you decide what to act on.
- Try another broad question:
What's happening in my pipeline?
Same pattern. Claude faithfully retrieves your pipeline data, but the response reads like a spreadsheet export. Nothing tells you which deals need attention or which are at risk.
Why is the response so flat?
Claude is using a single MCP tool (like list-records) to answer your question. It fetches everything that matches and hands it back without reasoning about what matters. A vague question gives Claude no signal about what to filter, combine, or prioritize.
Rewrite with specificity
The fix is straightforward. Give Claude constraints, filters, and a clear goal. This forces it to combine multiple tools and reason about what to show you.
- Send this precise version of the same pipeline question:
Show me open deals that haven't had any activity in the last 2 weeks, sorted by deal value.
Notice the difference. Claude now uses multiple tools: list-records with filters, plus search-notes-by-metadata to check for recent activity. The response is shorter but far more actionable.
- Try another precise prompt that targets a different type of information:
Find notes from my meetings this week that mention pricing or proposals.
What tools is Claude using now?
For the activity-based question, Claude chains list-records (to get open deals) with search-notes-by-metadata (to check recent activity on each).
For the notes question, Claude uses semantic-search-notes, which is AI-powered matching. It doesn't just look for the exact word "pricing." It finds notes that discuss pricing concepts even if that exact word isn't used.
The pattern for better prompts
Include at least two of these in every CRM prompt: a filter (open deals, this week, specific person), a constraint (last 2 weeks, top 5, sorted by value), and an output goal (summarize, flag risks, suggest next steps).
Combine record lookups with context
The most powerful queries ask Claude to chain multiple tools together for a single company. Instead of looking up a record and then separately searching for notes, you ask for everything at once.
- Pick a company in your Attio workspace that you know has notes and meeting activity.
- Send a multi-part query that requires Claude to use several tools in sequence:
Look up [[COMPANY_NAME="a company name from your Attio workspace"]], show me the last 3 notes on their record, and tell me when our next meeting is.
What does this prompt trigger?
Claude chains three tools in sequence: search-records to find the company, search-notes-by-metadata to pull recent notes on that record, and search-meetings to find upcoming meetings with that company.
You get a complete company briefing in one response. Doing this manually in Attio's UI would mean clicking into the record, scrolling through the activity feed, then checking your calendar separately.
Before you review the result, predict: did Claude give you a complete picture of this company, or will there be gaps?
- Read through Claude's response. You should see the company details, recent notes with their content, and meeting information combined into a single structured answer.
- Compare this to your very first prompt ("Tell me about my deals"). The difference in usefulness is the skill you just built: writing prompts that tell Claude exactly what to find and how to combine it.
Not seeing notes or meetings?
If Claude says there are no notes or meetings for your chosen company, try a different company that you know has recent activity. Not every record will have data in all categories.
If Claude returns an error about the search, make sure you're using a company name that exists exactly as spelled in your Attio workspace.
Help me figure out why Claude isn't finding notes or meetings for my company
You've just discovered the core skill of working with MCP-connected tools. Vague questions get flat data dumps. Precise, multi-tool prompts get actionable briefings. Next up, you'll put this to work by writing data back into your CRM through Claude.
Write to Your CRM Through Claude
You've proven that Claude can pull any data you need from your Attio workspace in seconds. But looking up information is only half the picture.
The real time-saver is creating and updating records without ever leaving your conversation. In this step, you'll write data back to your CRM through Claude and discover the approval flow that keeps your data safe.
In this step, get ready to:
- Create a note on a company record through Claude.
- Create a follow-up task with a deadline and assignee.
- Update a deal's pipeline stage entirely through conversation.
Create a note on a record
After every sales call, the first task is logging what happened. Instead of navigating to the right record in Attio and manually writing a note, you can ask Claude to do it in one message.
- Open a new chat in Claude Desktop.
- Click the + button in the lower-left corner of the message box.
- Select Connectors and confirm Attio is toggled on for this conversation.
- Type a prompt asking Claude to log a note on a company you know exists in your workspace. For example:
"Log a note on [company name]: Had a discovery call today. They're interested in our enterprise plan and want a proposal by next week."
Before you send it, think about what will happen. Will Claude just write the note instantly, or will something else happen first?
- Send the prompt.
Claude asks for your confirmation before writing. This is the MCP approval flow in action. Every write operation requires you to explicitly approve it before any data changes in your workspace.
- Click to approve the write operation.
- Open the company record in your Attio workspace and confirm the note appears with the content you provided.
Why does Claude ask for permission?
Attio's MCP server uses safety annotations to classify every tool. Read operations (listing records, searching notes) are auto-approved and happen instantly. Write operations (creating, updating, deleting) always request your confirmation first.
This means Claude can never accidentally overwrite your CRM data. You stay in control of every change.
Note not appearing in Attio?
Make sure you approved the write when Claude asked for confirmation. If you dismissed the prompt, the note was never created. Try sending the same request again and look for the approval button.
If Claude says it can't find the company, double-check that the company name you used matches exactly what's in your Attio workspace.
Still stuck? Help me figure out why my note didn't appear in Attio after I approved the write in Claude.
Create a follow-up task
Notes capture what happened. Tasks capture what needs to happen next. You can create tasks with deadlines and assignees through the same conversational flow.
- In the same Claude chat, type a prompt asking Claude to create a task linked to the same company. For example:
"Create a task to send a proposal to [company name] by [a date 3 days from today], assigned to me."
- Send the prompt and approve the write operation when Claude asks for confirmation.
- Open your Attio workspace and navigate to your tasks. Confirm the new task exists with the correct deadline and assignee.
What does Claude do behind the scenes?
Claude first uses a read tool to search for the company record (auto-approved, instant). Then it calls the create-task write tool with your specified details (requires your approval). You'll notice this two-step pattern in every write operation: Claude reads first to find the right target, then writes to it.
Task missing the deadline or assignee?
Be specific in your prompt. If you say "soon" instead of an exact date, Claude may interpret it differently than you expect. Use a concrete date like "August 14" rather than "in a few days".
If the task isn't assigned to you, make sure your prompt includes "assigned to me" explicitly.
Need more help? My task was created but the deadline or assignee is wrong.
Update a pipeline entry
Creating new records is powerful, but updating existing ones is where you skip the most clicks. Moving a deal to a new stage usually means finding the right list, locating the entry, and changing a dropdown. Through Claude, it's one sentence.
- Type a prompt asking Claude to move a company's deal to a different stage in your pipeline. For example:
"Update [company name]'s entry in [your pipeline list name] to [a stage name that exists in your pipeline]."
Use your real list and stage names
Replace the bracketed values with real names from your Attio workspace. If you're not sure what your pipeline list is called or what stages it has, ask Claude first: "What lists do I have in Attio?" and "What are the stages in [list name]?"
- Send the prompt and approve the write operation.
- Open the pipeline list in your Attio workspace and confirm the company's entry now shows the new stage.
Notice the pattern across all three writes. Every read happened instantly with no interruption. Every write paused and asked for your approval. This is the security model working as designed.
Why this approval model matters
Your CRM contains your most valuable business relationships. The approval flow ensures that a misunderstood prompt can never silently corrupt your data. You always get a chance to review exactly what Claude is about to change before it happens.
Reads are auto-approved because they can't damage anything. Writes require confirmation because they change your source of truth.
Stage didn't update?
The stage name in your prompt must exactly match a stage that exists in your pipeline list. If you type "Proposal Sent" but your pipeline uses "Proposal", Claude may not find a match. Ask Claude to show you the available stages first.
If Claude says it can't find the list entry, your company might not have an entry in that particular list yet. Check your Attio workspace to confirm the company appears in the pipeline.
Still stuck? Help me figure out why Claude couldn't update my pipeline stage in Attio.
Before you move on, take a final look at your Attio workspace. You should see three new pieces of data that you created entirely through conversation: a note on a company record, a task with a deadline, and an updated pipeline stage.
You can now read and write to your CRM without ever opening a browser tab. Next up, you'll combine multiple reads and writes into a single workflow that handles your entire post-call routine in one message.
Build a Post-Call CRM Routine
In the last step, you created notes, tasks, and updated pipeline stages one at a time. Each action was its own message, its own approval, its own context switch.
The real power of MCP unlocks when you combine multiple CRM actions into a single conversational flow. After every sales call, you repeat the same admin routine: log what happened, create follow-ups, and update the deal stage. That's 5-10 clicks across multiple Attio screens. In this step, you'll collapse it into one message.
In this step, get ready to:
- Design a single multi-part post-call prompt that chains reads and writes together.
- Run the full workflow and approve each write operation in sequence.
- Verify that notes, tasks, and pipeline updates all landed correctly in Attio.
Design your post-call prompt
Instead of sending three separate messages (one for the note, one for the task, one for the stage update), you can give Claude all the context and instructions in a single message. Claude will find the company, then execute each write in sequence.
- Switch back to Claude Desktop and start a new conversation.
- Type the following post-call prompt, filling in the highlighted placeholders with your own details:
I just finished a call with [[COMPANY_NAME="a company name from your Attio workspace"]]. Here's what happened: [[CALL_SUMMARY="2-3 sentences about the call, e.g. Discussed their migration timeline. They want to move forward with the enterprise plan and need a proposal by end of week."]]
Please:
1. Log these notes on their record in Attio
2. Create a follow-up task to send the proposal by [[PROPOSAL_DEADLINE="a date, e.g. next Friday"]]
3. Move their deal to the [[NEXT_STAGE="your next pipeline stage, e.g. Proposal Sent"]] stage in [[PIPELINE_LIST="your pipeline list name, e.g. Sales Pipeline"]]
What makes this prompt work?
This single message gives Claude everything it needs to execute a multi-step workflow. The company name tells Claude which record to target. The call summary becomes the note content. The numbered list tells Claude exactly which write operations to perform and in what order.
Claude will call multiple MCP tools behind the scenes: first a read (searching for the company record), then three writes (note, task, stage update). Each write will ask for your confirmation before executing.
Pick a different company than Step 4
Choose a different company from your Attio workspace than the one you used in the previous step. This makes verification easier since you can clearly see the new note, task, and stage change on a fresh record.
Run the workflow and approve the writes
- Send the prompt by pressing Enter.
- Watch Claude process the request. It will first search for the company record (a read operation that auto-approves), then begin the write operations.
- Claude will ask for your confirmation before each write. You'll see approval requests for: creating the note, creating the task, and updating the pipeline stage.
- Click Allow for each write operation as it appears.
After you approve all three writes, Claude confirms each action was completed. You should see a summary of what was done: the note logged, the task created with your specified deadline, and the deal stage updated.
Why does Claude ask for approval multiple times?
Read operations are auto-approved, but every write operation requires your explicit confirmation. This is a safety feature of the MCP approval flow. It prevents Claude from accidentally creating duplicate records or making changes you didn't intend.
In a multi-write workflow like this one, you'll approve each write individually. This gives you a chance to catch any misinterpretation before it hits your live CRM data.
Claude can't find the company?
Make sure the company name matches exactly how it appears in your Attio workspace. If your company is stored as "Acme Corp" but you typed "Acme Corporation", Claude may not find the right record. Check the name in Attio and try the prompt again with the exact spelling.
Also confirm that the Attio connector is toggled on for this conversation. Click the + button in the lower-left corner of the message box, then Connectors, and check that Attio is enabled.
Why can't Claude find my company record in Attio?
Verify the full workflow landed
Before you open Attio, think about what you expect to find. You sent one message that asked for three writes. What should be different on that company's record now?
- Open your Attio workspace in the browser and navigate to the company record you used in the prompt.
- Check the record's notes. You should see a new note containing your call summary text.
- Check the tasks section. You should see a new task with the proposal deadline you specified.
- Open your pipeline list and find the company's entry. The deal stage should now show the stage you requested in the prompt.
All three changes should be present. This entire sequence would have taken 5-10 clicks across multiple Attio screens. Now it's one message.
Missing a note, task, or stage update?
If one of the three writes is missing, scroll back through your Claude conversation. Check whether Claude asked for approval on that specific write and whether you clicked Allow. If you dismissed an approval prompt or the conversation ended early, that write was never executed.
If the pipeline stage didn't update, confirm the stage name in your prompt matches an existing stage in your Attio pipeline exactly. Attio pipeline stages are case-sensitive.
Help me figure out why one of my CRM writes didn't land in Attio.
You now have a reusable post-call routine. After every sales call, paste this prompt template, fill in the company name and call details, and let Claude handle the CRM admin. Next up, the Secret Mission challenges you to build a weekly pipeline review that runs across your entire deal set.
Secret mission
Build a Weekly Pipeline Review
Your post-call routine saves time on individual calls. But what about the weekly pipeline review your cofounder spends 15-20 minutes on every Monday morning? Build a single prompt that reads across your entire pipeline, flags stale deals, creates follow-up tasks, and summarizes pipeline health in seconds.
Clean Up Your Resources
Clean Up Your Resources
This project runs entirely on Attio's free plan and Claude's free plan, so there are no ongoing costs. Decide whether to keep your resources running, pause them to come back later, or delete them entirely.
Resources you used:
- Attio MCP connector (connected via OAuth in Claude Desktop).
- Notes created in Attio (discovery call note, post-call note).
- Tasks created in Attio (proposal task, post-call follow-up task, stale deal follow-up tasks).
- Pipeline entry updates in Attio (deal stage changes).
- Saved prompts (post-call routine prompt, weekly pipeline review prompt).
- Claude Desktop application.
Keep everything running
No action needed. Choose this if you plan to keep using Claude as your CRM assistant.
- Your Attio MCP connector stays active and available in every new Claude conversation.
- Your saved prompts (post-call routine and weekly pipeline review) remain ready to use.
- All notes, tasks, and pipeline updates you created are live CRM data your team can act on.
Pause - I'll come back to this later
Disconnect the Attio connector so Claude can no longer access your CRM. Your data and prompts stay intact for when you return.
- In Claude Desktop, navigate to Customize > Connectors.
- Find Attio in the list and click Disconnect.
- Your saved prompts and Attio data remain untouched. When you're ready to reconnect, follow the same Customize > Connectors path and re-authenticate with OAuth.
Delete - I don't want to use this again
Remove the connector, delete the test data you created, and optionally uninstall Claude Desktop.
- In Claude Desktop, navigate to Customize > Connectors. Find Attio and click Disconnect to revoke Claude's access to your workspace.
- In Attio, open each company record where you created test notes during this project. Click into the note and delete it.
- In Attio, navigate to your tasks view. Find and delete the tasks you created during this project (the proposal task, post-call follow-up task, and any stale deal follow-up tasks from the Secret Mission).
- If you moved deals to different pipeline stages during this project, open those entries in Attio and move them back to their original stages.
- Delete your saved prompt files. If you saved them as a local text file, delete that file. If you saved them in a Claude Project, open the project in Claude and delete it.
- To uninstall Claude Desktop on macOS, drag the Claude app from your Applications folder to the Trash. On Windows, open Settings, select Apps, find Claude, and click Uninstall.
Nice Work!
Nice Work!
You just turned your Attio CRM into a conversational AI assistant. Every lookup, note, task, and pipeline update that used to require clicking through multiple screens now happens in a single Claude message.
Here's what you learned:
- Connected Claude Desktop to your live Attio workspace via MCP using OAuth, with zero config files or API keys.
- Built a reusable post-call routine that logs notes, creates tasks, and updates pipeline stage in one message.
- Discovered that precise, multi-tool prompts produce dramatically better results than vague questions, and learned to craft queries that chain multiple MCP tools together.
- Secret Mission: Created a weekly pipeline review workflow that identifies stale deals and auto-generates follow-up tasks.
Ready to quiz yourself?