McpServer
Hosted MCP servers: your tools at one URL for any MCP client.
server = noclick.McpServer.from_name("crm-tools", tools=["hubspot", "search"], create_if_missing=True)
print(server.url) # paste into Claude, ChatGPT, Cursor or any MCP clientThe tools are the ones a Toolkit or an agent takes (connections, single
operations, search and fetch), served over Streamable HTTP. Calls act in
the server's user's connections, under your policy, and bill like toolkit calls.
A name that is no connection there serves an integration's operations that need
no account, on NoClick's key: tools=["exa.search"] needs no connection.
class McpServerYour tools at one URL, for Claude, ChatGPT, Cursor or any MCP client. Anyone with url can call
the tools, so keep it like a key and rotate() it if it leaks. toolCount is how many tools it
serves right now (a connection that isn't connected serves none); lastClientAt is when any
client last talked to it.
- Like every live object, it also has hydrate(), refresh() and raw.
| id | string | |
| name | string | |
| url | string | The URL MCP clients connect to; the path is its secret. |
| tools | (string | JsonObject)[] | What it serves, as you listed it: refs, and |
| toolCount | number | |
| userId | string | null | |
| createdAt | Date | null | |
| lastClientAt | Date | null | When a client last called it (null until one does). |
createstatic
static create(
name: string,
options: CallOptions & { tools: McpServerTools },
): Promise<McpServer>Create a server called name (unique per account and user; a duplicate throws Conflict
with existingId), serving at most 64 tools. A name is a connection in the server's user (the
account for an account server), else an integration's operations that need no account (on
NoClick's key), so "exa.search" needs no connection. Operations with arguments bound
(hubspot.only(...).bind(...)) keep them out of every client's reach; there {{user...}} is the
server's user.
The new server, with the url to give your MCP client.
fromNamestatic
static fromName(
name: string,
options?: CallOptions & { tools?: McpServerTools; createIfMissing?: boolean },
): McpServerA lazy reference to the server called name for the current (or given) user. With
createIfMissing your code is the definition: it's created on first use, and an existing server
whose tools differ is updated to match. Its URL stays the same either way.
A server that loads (or is created, or brought in step with your definition) the first time you read a field. Nothing is sent yet.
fromIdstatic
static fromId(serverId: string, options?: CallOptions): McpServerA lazy reference to a server by id.
A server that loads the first time you read a field. Nothing is sent yet.
getstatic
static get(serverId: string, options?: CallOptions): Promise<McpServer>Load a server by id now; an unknown id raises noclick.NotFound.
The server, loaded.
liststatic
static list(options?: ReadOptions & { limit?: number }): Promise<McpServer[]>The current user's servers (the account's own outside asUser, or those userFilter covers).
Return at most this many.
Which users the read covers (user_id query), instead of acting as one (user).
undefined = the ambient user (asUser), null = the account itself.
The client to send with; defaults to the module client built from NOCLICK_API_KEY.
Every matching server, newest first, fetched page by page.
listPagestatic
static listPage(options?: ReadOptions & PageOptions): Promise<Page<McpServer>>One page of servers; pass nextCursor back as cursor.
The next_cursor of the page before; omit it for the first page.
Return at most this many.
Which users the read covers (user_id query), instead of acting as one (user).
undefined = the ambient user (asUser), null = the account itself.
The client to send with; defaults to the module client built from NOCLICK_API_KEY.
A page whose data holds the servers and whose next_cursor is None on the last page.
update
update(changes: { tools?: McpServerTools; name?: string }): Promise<this>Change what it serves, or its name; the URL stays. A connected client sees new tools when it next lists them.
This server, updated.
rotate
rotate(): Promise<this>Give it a new URL; the old one stops answering at once, so reconnect your clients with the new one.
This server, with its new url.
clients
clients(): Promise<McpClient[]>The MCP clients that have connected, most recently seen first: whether your agent has actually started using the server, apart from whether the server is ready.
Each client's name and version as it reported them, when it was first and last seen,
and how many tools it listed. An empty list until a client connects.
delete
delete(): Promise<void>Delete the server; its URL stops answering. The connections it served stay.
McpClient
interface McpClientAn MCP client that has connected to a server, as it named itself (Claude, cursor). toolCount
is how many tools it saw when it last listed them: fewer than the server serves means it listed
them before you added some, and most clients list again only when a session starts.
| name | string | |
| version | string | null | |
| firstSeenAt | Date | null | |
| lastSeenAt | Date | null | |
| toolCount | number | null | |
| raw | JsonObject | The response JSON exactly as the API sent it. |