TypeScript SDK · preview
Explore ConceptmemClient and typed contracts for observations, queries, and write results. Public npm publication is pending.
For builders
Let a support agent propose a customer update and an operations agent read the accepted result. Connect through hosted REST or MCP, with one model, one set of policies, and a shared change history.
In practice
Each agent connects with its own credentials and calls the same tools. What one agent’s update changed, the next agent reads as current facts, along with the source and the agent that recorded each one.
memory_insertAt 10:32 the CRM sync job sends its batch as a write plan with an idempotency key. The observations commit one at a time, in order, and each gets its own receipt.
{
"idempotencyKey": "crm-sync-2026-09-13T10:32",
"source": "crm-sync",
"observations": [
{
"entityType": "Customer",
"entityRef": "customer:crm_1042",
"data": { "city": "Berlin", "plan": "growth" }
},
{
"entityType": "Customer",
"entityRef": "customer:crm_1043",
"data": { "city": "Porto", "plan": "starter" }
}
]
}Entity: customer:crm_1042
- Created Customer "customer:crm_1042"
- Asserted "city" = "Berlin"
- Asserted "plan" = "growth"
Entity: customer:crm_1043
- Created Customer "customer:crm_1043"
- Asserted "city" = "Porto"
- Asserted "plan" = "starter"memory_operationIf the job loses that response, it does not have to guess. It asks for the receipt by the same key and learns that both observations committed, so it sends nothing twice.
{
"idempotencyKey": "crm-sync-2026-09-13T10:32",
"profile": "summary-v1"
}{
"ok": true,
"operation": {
"id": "312bfc8b-7186-458f-9b1a-f63cc0d4d88d",
"status": "complete",
"completed": 2,
"total": 2
},
"receipt": {
"profile": "summary-v1",
"totals": {
"operations": { "create_entity": 2, "assert_fact": 4 },
"skipped": 0,
"violations": 0,
"blockingViolations": 0,
"pendingReview": 0
}
}
}memory_insertAt 11:45 a support agent, on its own connection, learns the customer moved to Lisbon and prefers email. Lisbon supersedes the city the sync recorded.
{
"entityType": "Customer",
"entityRef": "customer:crm_1042",
"data": { "city": "Lisbon", "preferred_channel": "email" },
"source": "support-thread",
"confidence": 0.97
}Entity: customer:crm_1042
- Superseded "city": "Berlin" → "Lisbon"
- Asserted "preferred_channel" = "email"memory_getBefore contacting the customer, an operations agent reads the record. It gets the accepted values, and each fact points to the source and agent that recorded it.
{
"entity": "customer:crm_1042",
"profile": "compact-v2",
"evidence": "summary"
}{
"profile": "compact-v2",
"results": [
{
"status": "found",
"entity": { "canonicalId": "customer:crm_1042", "entityType": "Customer" },
"facts": [
{ "predicate": "city", "value": "Lisbon", "evidence": { "sourceRefs": ["s1"] } },
{ "predicate": "plan", "value": "growth", "evidence": { "sourceRefs": ["s2"] } },
{
"predicate": "preferred_channel",
"value": "email",
"evidence": { "sourceRefs": ["s1"] }
}
]
}
],
"sources": {
"s1": {
"source": "support-thread",
"actor": "support-agent",
"confidence": 0.97,
"timestamp": "2026-09-13T11:45:00.000Z"
},
"s2": {
"source": "crm-sync",
"actor": "crm-sync",
"confidence": 0.9,
"timestamp": "2026-09-13T10:32:00.000Z"
}
}
}Calls and results from the ConceptMem MCP tools on a new database, one connection per agent. The service sets actor from the credential behind each connection, never from the call; here each connection is named after its agent. preferred_channel is declared with three allowed values in this example’s schema.
Built into the workflow
Explore ConceptmemClient and typed contracts for observations, queries, and write results. Public npm publication is pending.
Submit structured observations and query current records from your application using workspace credentials.
Give a compatible client tools to read context, propose updates, and inspect outcomes over Streamable HTTP.
Follow the MCP guide or explore the TypeScript preview below. The example uses a fresh database, a stable customer reference, and the default policy. Structured observations can be consolidated without hosted AI.
{
"mcpServers": {
"conceptmem": {
"url": "YOUR_WORKSPACE_MCP_ENDPOINT",
"headers": {
"Authorization": "Bearer YOUR_WORKSPACE_KEY"
}
}
}
}Use your workspace endpoint and access key from Connections. The MCP guide walks through proposing an update, reading the accepted record, and inspecting its history.
Read the MCP guideYour integration supplies the observation and its provenance. ConceptMem resolves the entity, checks the ontology, and applies policy inside the managed service. Inspect the result before treating an update as accepted.
Read the integration documentationCommon questions
Use the hosted REST API from application code or connect a compatible client to the hosted MCP endpoint. Create workspace credentials and follow the Connections guide. The TypeScript SDK and public types are in preview; public npm publication is pending.
Yes. Every observation, regardless of the client it came from, passes through consolidation with the same ontology checks, policy resolution, and provenance requirement.
Yes. Authorized agents in the same workspace can propose updates and query shared current records. Use stable source-system IDs and decide which source owns each field. Your integration maps and submits the data; automatic identity merging and CRM synchronization are not provided.
Inspect the write result: applied operations, skipped writes, violations, and any pending review. Request success alone does not mean every field was applied. A skipped field stays out of the update, and a held proposal needs a review decision.
Start with one shared record
Create a database on the free plan, connect an agent over MCP or REST, and propose your first update.