Virtuous MCP by usefulapi

io.usefulapiPublished by usefulapi.ioOfficial publisherv1.41.1Updated Nov 14, 2026

Search donors and contacts, giving history, notes and projects, and log notes, tags and gifts.

The publisher's own server: Ably MCP by usefulapi

VerifiedStreamable HTTPWeb executableData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Hosted MCP server for Virtuous CRM that lets an assistant search donors and contacts, read giving history, notes, tags, projects and events, and log notes…

What you can do
  • Search and read contacts, individuals, notes, note types, tags and the current organization
  • Read gifts and a contact's giving history
  • Search and read projects and events, plus query options and generic record queries
  • Log notes on contacts, tag contacts, and submit contacts or gifts for import
  • Check monthly usage, request a missing feature, and manage or cancel a paid plan
When to use it
Useful for nonprofit fundraising and donor-relations teams that keep their data in Virtuous and want an assistant to look up donor records, giving history or event RSVPs, or to log notes and gifts without switching apps.
Requirements
A remote MCP endpoint added by URL only; no local install. Sign-in is via OAuth, and the login page asks for a Virtuous API key (Settings, API Keys), which is validated and stored per user. A free plan allows 50 tool calls per month; paid plans raise the limit.
Before you install
Write tools create notes, tags and import transactions in Virtuous, so confirm before running them. The Virtuous API key is entered at login and stored per user. Paid plans cost money (Pro and Pro+ monthly or yearly via Stripe Checkout), upgrades charge the price difference immediately, and cancellations give no refund for the current period. Tool calls are metered against a monthly quota.

Installation

In SourceWeft

  1. Open Virtuous MCP by usefulapi in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.usefulapi%2Fvirtuous-crm/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "virtuous-by-usefulapi": {
      "type": "http",
      "url": "https://virtuous-crm.usefulapi.io/mcp"
    }
  }
}

README

Virtuous MCP by usefulapi

Use Virtuous from Claude, Cursor, or any MCP client — search donors, read contacts, giving history, notes, tags, projects and events, run queries, and log notes, tags, contacts and gifts. Hosted, no local install: connect with your own Virtuous credentials.

Live endpoint: https://virtuous-crm.usefulapi.io/mcp · Homepage: https://usefulapi.io/virtuous-crm

Connect

  • Claude (claude.ai, Desktop): open Customize → Connectors, click + Add → Add custom connector, and paste https://virtuous-crm.usefulapi.io/mcp.
  • Claude Code: claude mcp add --transport http virtuous-crm https://virtuous-crm.usefulapi.io/mcp, then run /mcp to log in.
  • VS Code: Add to VS Code.
  • Cursor and other clients: add the URL as a remote MCP server:
json
{  "mcpServers": {    "virtuous-crm": {      "url": "https://virtuous-crm.usefulapi.io/mcp"    }  }}

Add only the URL. Do not add an Authorization header or an API key to the client config: the server signs you in with OAuth, and the login page asks for your Virtuous credentials.

Step-by-step setup, where to find your credentials, and FAQ: https://usefulapi.io/virtuous-crm/

On first connect you'll provide your Virtuous API key (Settings → API Keys). They're validated, stored per-user, and scoped to you — no keys in config files.

Tools

ToolTypeWhat it does
virtuous_get_current_organizationreadGet the current organization
virtuous_searchreadGlobal search
virtuous_search_contactsreadSearch contacts
virtuous_get_contactreadGet a contact
virtuous_find_contactreadFind a contact by email or reference
virtuous_list_contact_individualsreadList a contact's individuals
virtuous_list_contact_notesreadList a contact's notes
virtuous_list_contact_note_typesreadList contact note types
virtuous_list_contact_tagsreadList a contact's tags
virtuous_list_contact_giftsreadList a contact's gifts
virtuous_get_giftreadGet a gift
virtuous_list_tagsreadList tags
virtuous_search_projectsreadSearch projects
virtuous_get_projectreadGet a project
virtuous_list_eventsreadList events
virtuous_get_query_optionsreadGet query options
virtuous_queryreadQuery records
virtuous_create_contact_notewriteLog a note on a contact
virtuous_add_contact_tagwriteTag a contact
virtuous_create_contact_transactionwriteSubmit a contact for import
virtuous_create_gift_transactionwriteSubmit a gift for import
virtuous_usage_statusmetaUsage status (free-tier meter)
virtuous_request_featuremetaRequest a missing feature
virtuous_upgrademetaUpgrade to Pro or Pro+
virtuous_cancel_subscriptionmetaCancel the Pro subscription

read tools are read-only; write tools mutate data (clients should confirm them); meta tools report usage, manage your subscription or send a feature request.

Pricing

PlanPriceLimit
Free$050 tool calls / month
Pro (per user)$9/mo or $90/yr (2 months free)10,000 tool calls / month
Pro+ (per user)$39/mo or $390/yr (2 months free)100,000 tool calls / month

Each paid plan covers this server only. Ask your AI to run virtuous_upgrade and choose Pro or Pro+, billed monthly or yearly (it returns a Stripe Checkout link). If you already have Pro, ask to change it to Pro+. The change requires your confirmation, keeps your billing interval and charges the price difference for the rest of the period immediately. Cancel any time with virtuous_cancel_subscription: your paid plan continues to the end of the paid period, with no refund for the current period, and asking to resume the same plan with virtuous_upgrade before then undoes the cancel. Or write to [email protected].

License

MIT © usefulapi. Not affiliated with or endorsed by Virtuous.

Source: servers/virtuous-crm/README.md at commit f22f848

Tools

21

virtuous_get_current_organization

Get the current organization

Fetch the Virtuous organization this API key acts in — its name, time zone and culture, and whether the key's user is an administrator. A cheap way to confirm the key works. Virtuous: GET /api/Organization/Current.

Takes no parameters.

virtuous_search_contacts

Search contacts

Find contacts whose name, email, phone or address fully or partially matches a search string. Returns id, name, contact type, email, phone and address per match. Virtuous: POST /api/Contact/Search.

Parametersskiptakesearchrequired

virtuous_get_contact

Get a contact

Fetch one contact (household, organization, foundation ...) with its address, giving summary (life-to-date, year-to-date, last gift), individuals and their contact methods, and custom fields. Virtuous: GET /api/Contact/{contactId}.

Parameterscontact_idrequired

virtuous_find_contact

Find a contact by email or reference

Look up a single contact by email address, or by an external reference (reference source + id, e.g. Stripe customer id). Give either email, or both reference_source and reference_id; if both are given Virtuous prioritises the reference. Virtuous: GET /api/Contact/Find.

Parametersemailreference_idreference_source

virtuous_list_contact_individuals

List a contact's individuals

List the individuals (people) that belong to a contact/household, with names, birth dates, and their emails and phones (contact methods). Virtuous: GET /api/ContactIndividual/ByContact/{contactId}.

Parameterscontact_idrequired

virtuous_list_contact_notes

List a contact's notes

List the notes logged on a contact — calls, meetings, emails and other touchpoints — with type, date, text and author. Virtuous: GET /api/ContactNote/ByContact/{contactId}.

Parametersskiptakesort_bycontact_idrequireddescending

virtuous_list_contact_note_types

List contact note types

List the note types this organization accepts on a contact note (e.g. Call, Email, Visit; admins can add custom ones). Call it before virtuous_create_contact_note and pass one of these names as its type. Virtuous: GET /api/ContactNote/Types.

Takes no parameters.

virtuous_list_contact_tags

List a contact's tags

List the tags applied to a contact (contactTagId, tagId, name). Virtuous: GET /api/ContactTag/ByContact/{contactId}.

Parametersskiptakecontact_idrequired

virtuous_list_contact_gifts

List a contact's gifts

List a contact's giving history: gift id, type, date, amount, segment and batch. Use virtuous_get_gift for designations and full detail. Virtuous: GET /api/Gift/ByContact/{contactId}.

Parametersskiptakesort_bycontact_idrequireddescending

virtuous_get_gift

Get a gift

Fetch one gift in full: contact, type, date, amount and currency, batch, segment, grant, tribute, receipt date, designations to projects, premiums and custom fields. Virtuous: GET /api/Gift/{giftId}.

Parametersgift_idrequired

virtuous_list_tags

List tags

List the organization's tags (id, name, tag group). Use this to find a tagId before virtuous_add_contact_tag. Virtuous: GET /api/Tag.

Parametersskiptake

virtuous_search_projects

Search projects

Find projects (funds / designations gifts are given to) by name or code, with their balances, financial need and life-to-date giving. Virtuous: POST /api/Project/Search.

Parametersskiptakesearchrequired

virtuous_get_project

Get a project

Fetch one project: code, type, status, balances, financial need, date range, life-to-date and calendar-year giving and gift/giver counts. Virtuous: GET /api/Project/{projectId}.

Parametersproject_idrequired

virtuous_list_events

List events

List the organization's events: name, type, location, start/end, invite and RSVP counts, attendance and total giving. Virtuous: GET /api/Event.

Parametersskiptake

virtuous_get_query_options

Get query options

List the parameters, their types, allowed operators and value options that virtuous_query accepts for one record type. Call this BEFORE building a query. Virtuous: GET /api/<Resource>/QueryOptions.

Parametersresourcerequired

virtuous_query

Query records

Run a Virtuous query-builder query against one record type (contacts, gifts, campaigns, projects, tasks, grants, pledges, recurring gifts, events ...). Conditions use parameter/operator names from virtuous_get_query_options. Returns { list, total }. For Contact and Gift, full_details returns full records instead of the abbreviated view. Virtuous: POST /api/<Resource>/Query.

Parametersskiptakegroupssort_byresourcerequireddescendingfull_detailsinclude_archived

virtuous_create_contact_note

Log a note on a contact

Add a note to a contact's timeline — a call, meeting, visit or other touchpoint. Writes to the donor record. Get the valid type names from virtuous_list_contact_note_types first. Virtuous: POST /api/ContactNote.

Parametersnoterequiredtypeprivateimportantcontact_idrequiredtime_spentnote_date_time

virtuous_add_contact_tag

Tag a contact

Apply an existing tag to a contact (find the tagId with virtuous_list_tags). Virtuous: POST /api/ContactTag.

Parameterstag_idrequiredcontact_idrequired

virtuous_create_contact_transaction

Submit a contact for import

Submit a new or updated contact through Virtuous's import pipeline (the recommended way to add contacts). It is matched against existing contacts by name, email, phone, address and reference, bundled into an import at midnight, and only committed when a user reviews the import and clicks Run — so nothing is created in real time and no duplicates are forced. Virtuous: POST /api/Contact/Transaction.

Parameterscitynametagsemailphonestatetitlepostalsuffixcountryaddress1address2+11 more

virtuous_create_gift_transaction

Submit a gift for import

Record a gift (donation already received) through Virtuous's gift import pipeline — the method Virtuous recommends. The gift is matched to a contact, recurring gift or pledge, held until the nightly import, and only created when a user reviews the import and clicks Run. This records a gift; it does NOT charge anyone. Identify the donor with contact.id, contact.referenceId, or name/email details. Virtuous: POST /api/v2/Gift/Transaction.

Parametersbatchnotesamountrequiredcontactrequiredsegmentfrequencygift_daterequiredgift_typerequiredis_privatecheck_numberdesignationsreceipt_date+5 more

Version history

24
  1. v1.41.1LatestNov 13, 2026
  2. v1.40.0Nov 12, 2026
  3. v1.39.3Nov 11, 2026
  4. v1.38.3Nov 7, 2026
  5. v1.37.3Nov 5, 2026
  6. v1.37.2Nov 5, 2026
  7. v1.37.1Nov 4, 2026
  8. v1.37.0Nov 3, 2026
  9. v1.36.1Nov 3, 2026
  10. v1.35.0Nov 1, 2026
  11. v1.33.0Oct 31, 2026
  12. v1.32.0Oct 31, 2026
  13. v1.31.2Oct 30, 2026
  14. v1.31.0Oct 30, 2026
  15. v1.25.0Oct 26, 2026
  16. v1.22.4Oct 25, 2026
  17. v1.22.1Oct 25, 2026
  18. v1.21.0Oct 24, 2026
  19. v1.18.0Oct 23, 2026
  20. v1.16.4Oct 22, 2026
  21. v1.16.3Oct 21, 2026
  22. v1.11.1Oct 9, 2026
  23. v1.10.0Oct 9, 2026
  24. v1.0.0Sep 30, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Usefulapi integrations