salesforce-agent 2.3.2__tar.gz → 2.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {salesforce_agent-2.3.2/salesforce_agent.egg-info → salesforce_agent-2.3.3}/PKG-INFO +5 -5
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/README.md +1 -1
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/pyproject.toml +4 -7
- salesforce_agent-2.3.3/requirements.txt +2 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/__init__.py +1 -1
- salesforce_agent-2.3.3/salesforce_agent/connector_sources.py +159 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/mcp_server.py +1 -1
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/certification.json +0 -3
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/salesforce.ttl +3 -5
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/prompts/crm_specialist.json +0 -2
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3/salesforce_agent.egg-info}/PKG-INFO +5 -5
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/SOURCES.txt +1 -2
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/entry_points.txt +0 -3
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/requires.txt +3 -3
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_fleet_name.py +2 -13
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_kg_ingest.py +4 -4
- salesforce_agent-2.3.2/requirements.txt +0 -2
- salesforce_agent-2.3.2/salesforce_agent/connectors/mcp_source_presets.json +0 -29
- salesforce_agent-2.3.2/salesforce_agent/connectors/tool_schema_fingerprints.json +0 -8
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/LICENSE +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/MANIFEST.in +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/__main__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/__init__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_admin.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_base.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_bulk.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_describe.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_query.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_records.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api_client.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/auth.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/connectors/__init__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/kg_ingest.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/mcp/__init__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/mcp/mcp_salesforce.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/mcp_config.json +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/__init__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/fixtures/records.json +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/mappings/source.yaml +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/migrations/manifest.json +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/shapes/connector.shacl.ttl +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/prompts/__init__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/salesforce_input_models.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/salesforce_response_models.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/__init__.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-agent-operations/SKILL.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-agent-operations/agents/openai.yaml +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-agent-operations/references/catalog.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-crm-knowledge-graph/SKILL.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-crm-knowledge-graph/WORKFLOW.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-record-management/SKILL.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-record-management/WORKFLOW.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-soql-query/SKILL.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/skills/salesforce-soql-query/WORKFLOW.md +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/dependency_links.txt +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/top_level.txt +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/setup.cfg +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_admin.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_api_wrapper.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_auth.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_bulk.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_default_content_surfaces.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_describe.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_errors.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_init_dynamics.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_query.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_records.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_salesforce_mcp_validation.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_salesforce_models.py +0 -0
- {salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/tests/test_startup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: salesforce-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.3
|
|
4
4
|
Summary: Salesforce REST/SOQL/Bulk API 2.0 connector + MCP Server + A2A Server for Agentic AI!
|
|
5
5
|
Author-email: Project Maintainers <maintainers@users.noreply.github.com>
|
|
6
6
|
License: MIT
|
|
@@ -12,14 +12,14 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Requires-Python: <3.15,>=3.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
15
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Provides-Extra: mcp
|
|
18
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
18
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
|
|
19
19
|
Provides-Extra: jwt
|
|
20
20
|
Requires-Dist: cryptography>=50.0.2; extra == "jwt"
|
|
21
21
|
Provides-Extra: all
|
|
22
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
22
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "all"
|
|
23
23
|
Requires-Dist: cryptography>=50.0.2; extra == "all"
|
|
24
24
|
Provides-Extra: test
|
|
25
25
|
Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
|
|
@@ -40,7 +40,7 @@ Dynamic: license-file
|
|
|
40
40
|

|
|
41
41
|

|
|
42
42
|
|
|
43
|
-
*Version: 2.3.
|
|
43
|
+
*Version: 2.3.3*
|
|
44
44
|
|
|
45
45
|
> **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
|
|
46
46
|
> server live on the docs site:
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|

|
|
10
10
|

|
|
11
11
|
|
|
12
|
-
*Version: 2.3.
|
|
12
|
+
*Version: 2.3.3*
|
|
13
13
|
|
|
14
14
|
> **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
|
|
15
15
|
> server live on the docs site:
|
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "salesforce-agent"
|
|
7
|
-
version = "2.3.
|
|
7
|
+
version = "2.3.3"
|
|
8
8
|
description = "Salesforce REST/SOQL/Bulk API 2.0 connector + MCP Server + A2A Server for Agentic AI!"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
|
|
11
11
|
requires-python = ">=3.12, <3.15"
|
|
12
|
-
dependencies = [ "agent-connector-sdk[mcp]>=0.
|
|
12
|
+
dependencies = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0", "httpx>=0.28.1",]
|
|
13
13
|
[[project.authors]]
|
|
14
14
|
name = "Project Maintainers"
|
|
15
15
|
email = "maintainers@users.noreply.github.com"
|
|
@@ -18,9 +18,9 @@ email = "maintainers@users.noreply.github.com"
|
|
|
18
18
|
text = "MIT"
|
|
19
19
|
|
|
20
20
|
[project.optional-dependencies]
|
|
21
|
-
mcp = [ "agent-connector-sdk[mcp]>=0.
|
|
21
|
+
mcp = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0",]
|
|
22
22
|
jwt = [ "cryptography>=50.0.2",]
|
|
23
|
-
all = [ "agent-connector-sdk[mcp]>=0.
|
|
23
|
+
all = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0", "cryptography>=50.0.2",]
|
|
24
24
|
test = [ "pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0", "cryptography>=50.0.2",]
|
|
25
25
|
|
|
26
26
|
[project.scripts]
|
|
@@ -32,9 +32,6 @@ salesforce-agent = "salesforce_agent.skills"
|
|
|
32
32
|
[project.entry-points."agent_connector_sdk.ontology_providers"]
|
|
33
33
|
salesforce-agent = "salesforce_agent.ontology"
|
|
34
34
|
|
|
35
|
-
[project.entry-points."agent_connector_sdk.source_connector_providers"]
|
|
36
|
-
salesforce-agent = "salesforce_agent.connectors"
|
|
37
|
-
|
|
38
35
|
[project.entry-points."agent_connector_sdk.prompt_providers"]
|
|
39
36
|
salesforce-agent = "salesforce_agent.prompts"
|
|
40
37
|
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"""Data sources of this connector, declared by tool name (generated by connector-ontology-map migrate).
|
|
2
|
+
|
|
3
|
+
Served live as ``connector://resources``. Regenerate by editing the declarations, not the tools.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ruff: noqa: E501
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from agent_connector_sdk.ingest.live_declaration import source_meta
|
|
10
|
+
from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
|
|
11
|
+
|
|
12
|
+
CONNECTOR = "salesforce-mcp"
|
|
13
|
+
|
|
14
|
+
SOURCES = (
|
|
15
|
+
source_meta(
|
|
16
|
+
tool="salesforce_soql_query",
|
|
17
|
+
source_id="salesforce-opportunities",
|
|
18
|
+
record_type="salesforce_opportunity",
|
|
19
|
+
id_field="Id",
|
|
20
|
+
preset={
|
|
21
|
+
"doc_type": "salesforce_opportunity",
|
|
22
|
+
"params": {
|
|
23
|
+
"soql": "SELECT Id, Name, StageName, Amount, CloseDate, Description FROM Opportunity",
|
|
24
|
+
},
|
|
25
|
+
"params_style": "args",
|
|
26
|
+
},
|
|
27
|
+
records_path="records",
|
|
28
|
+
server="salesforce-mcp",
|
|
29
|
+
text_field="Description",
|
|
30
|
+
title_field="Name",
|
|
31
|
+
),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
SCHEMA_MAPPINGS = {
|
|
35
|
+
"Account": {
|
|
36
|
+
"fields": {
|
|
37
|
+
"amount": "xsd:decimal",
|
|
38
|
+
"closeDate": "xsd:date",
|
|
39
|
+
"email": "xsd:string",
|
|
40
|
+
"industry": "xsd:string",
|
|
41
|
+
"leadStatus": "xsd:string",
|
|
42
|
+
"salesforceId": "xsd:string",
|
|
43
|
+
"stageName": "xsd:string",
|
|
44
|
+
},
|
|
45
|
+
"ontology_class": None,
|
|
46
|
+
},
|
|
47
|
+
"Campaign": {
|
|
48
|
+
"fields": {
|
|
49
|
+
"amount": "xsd:decimal",
|
|
50
|
+
"closeDate": "xsd:date",
|
|
51
|
+
"email": "xsd:string",
|
|
52
|
+
"industry": "xsd:string",
|
|
53
|
+
"leadStatus": "xsd:string",
|
|
54
|
+
"salesforceId": "xsd:string",
|
|
55
|
+
"stageName": "xsd:string",
|
|
56
|
+
},
|
|
57
|
+
"ontology_class": None,
|
|
58
|
+
},
|
|
59
|
+
"Case": {
|
|
60
|
+
"fields": {
|
|
61
|
+
"amount": "xsd:decimal",
|
|
62
|
+
"closeDate": "xsd:date",
|
|
63
|
+
"email": "xsd:string",
|
|
64
|
+
"industry": "xsd:string",
|
|
65
|
+
"leadStatus": "xsd:string",
|
|
66
|
+
"salesforceId": "xsd:string",
|
|
67
|
+
"stageName": "xsd:string",
|
|
68
|
+
},
|
|
69
|
+
"ontology_class": None,
|
|
70
|
+
},
|
|
71
|
+
"Contact": {
|
|
72
|
+
"fields": {
|
|
73
|
+
"amount": "xsd:decimal",
|
|
74
|
+
"closeDate": "xsd:date",
|
|
75
|
+
"email": "xsd:string",
|
|
76
|
+
"industry": "xsd:string",
|
|
77
|
+
"leadStatus": "xsd:string",
|
|
78
|
+
"salesforceId": "xsd:string",
|
|
79
|
+
"stageName": "xsd:string",
|
|
80
|
+
},
|
|
81
|
+
"ontology_class": "Person",
|
|
82
|
+
},
|
|
83
|
+
"Lead": {
|
|
84
|
+
"fields": {
|
|
85
|
+
"amount": "xsd:decimal",
|
|
86
|
+
"closeDate": "xsd:date",
|
|
87
|
+
"email": "xsd:string",
|
|
88
|
+
"industry": "xsd:string",
|
|
89
|
+
"leadStatus": "xsd:string",
|
|
90
|
+
"salesforceId": "xsd:string",
|
|
91
|
+
"stageName": "xsd:string",
|
|
92
|
+
},
|
|
93
|
+
"ontology_class": None,
|
|
94
|
+
},
|
|
95
|
+
"Opportunity": {
|
|
96
|
+
"fields": {
|
|
97
|
+
"amount": "xsd:decimal",
|
|
98
|
+
"closeDate": "xsd:date",
|
|
99
|
+
"email": "xsd:string",
|
|
100
|
+
"industry": "xsd:string",
|
|
101
|
+
"leadStatus": "xsd:string",
|
|
102
|
+
"salesforceId": "xsd:string",
|
|
103
|
+
"stageName": "xsd:string",
|
|
104
|
+
},
|
|
105
|
+
"ontology_class": None,
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
RESOURCES = (
|
|
110
|
+
{
|
|
111
|
+
"id_prefix": "account",
|
|
112
|
+
"label": "Account",
|
|
113
|
+
"name": "Account",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id_prefix": "campaign",
|
|
117
|
+
"label": "Campaign",
|
|
118
|
+
"name": "Campaign",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id_prefix": "case",
|
|
122
|
+
"label": "Case",
|
|
123
|
+
"name": "Case",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id_prefix": "contact",
|
|
127
|
+
"label": "Contact",
|
|
128
|
+
"name": "Contact",
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"id_prefix": "lead",
|
|
132
|
+
"label": "Lead",
|
|
133
|
+
"name": "Lead",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id_prefix": "opportunity",
|
|
137
|
+
"label": "Opportunity",
|
|
138
|
+
"name": "Opportunity",
|
|
139
|
+
},
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def declaration() -> IngestSourceDeclaration:
|
|
144
|
+
"""The declaration the server assembles from this module."""
|
|
145
|
+
specs = []
|
|
146
|
+
for item in SOURCES:
|
|
147
|
+
for entry in item["connector_sources"]:
|
|
148
|
+
body = {k: v for k, v in entry.items() if k not in ("tool", "mapping")}
|
|
149
|
+
specs.append(
|
|
150
|
+
IngestSourceSpec.model_validate({**body, "tools": (entry["tool"],)})
|
|
151
|
+
)
|
|
152
|
+
return IngestSourceDeclaration.model_validate(
|
|
153
|
+
{
|
|
154
|
+
"connector": CONNECTOR,
|
|
155
|
+
"sources": specs,
|
|
156
|
+
"schema_mappings": SCHEMA_MAPPINGS,
|
|
157
|
+
"resources": RESOURCES,
|
|
158
|
+
}
|
|
159
|
+
)
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/certification.json
RENAMED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"api_version": "arbora.io/v1",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"connector_manifest.yml": "8f242e7c62b075786c8c47967e40d62aa44a967593782ae679771dc27e4693e8",
|
|
5
|
-
"salesforce_agent/connectors/mcp_source_presets.json": "644ed7237882e5b5ac96b1c16696e1348a15f025c0d10c23745dfcd8ea6d0c87",
|
|
6
|
-
"salesforce_agent/connectors/tool_schema_fingerprints.json": "f2db55d366dd1f4b9da00ac78433cbc0a627109d15a23d3a5bdda3d493e1c8f3",
|
|
7
4
|
"salesforce_agent/ontology/fixtures/records.json": "b344913dc0bbc8999151a56c1802f1c15cf818888a0ab8aaa5063326b21e9043",
|
|
8
5
|
"salesforce_agent/ontology/mappings/source.yaml": "a138feb24291bd26939a85e7e786dc158d145a7be056ae6cc3b69e8342fdaa3c",
|
|
9
6
|
"salesforce_agent/ontology/migrations/manifest.json": "76e71d3e6fbb573e65cb9ce25868523b5aa8ba1f4cca15b266d343ee9d2b42fc",
|
|
@@ -13,9 +13,8 @@
|
|
|
13
13
|
# (salesforce_soql / salesforce_records / salesforce_describe / salesforce_ingest_crm).
|
|
14
14
|
# :Person (shared) is REUSED for the owning Salesforce User — never redefined here.
|
|
15
15
|
|
|
16
|
-
:Account a owl:Class
|
|
17
|
-
|
|
18
|
-
rdfs:comment "A company or organization tracked in Salesforce CRM (sObject Account)." .
|
|
16
|
+
:Account a owl:Class .
|
|
17
|
+
|
|
19
18
|
|
|
20
19
|
:Contact a owl:Class ;
|
|
21
20
|
rdfs:label "Contact" ;
|
|
@@ -131,5 +130,4 @@
|
|
|
131
130
|
rdfs:comment """Salesforce CRM model — accounts, contacts, opportunities, leads,
|
|
132
131
|
cases and campaigns with their sales and service relationships — federated into
|
|
133
132
|
the agent-connector-sdk knowledge-graph hub. Reuses the shared :Person for the owning
|
|
134
|
-
Salesforce User."""
|
|
135
|
-
owl:imports <http://knuckles.team/kg/enterprise> .
|
|
133
|
+
Salesforce User.""" .
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/prompts/crm_specialist.json
RENAMED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
"schema_version": "1.0",
|
|
5
5
|
"prompt_version": "0.1.0",
|
|
6
6
|
"source": "salesforce-agent",
|
|
7
|
-
"extends": "agent-connector-sdk:base",
|
|
8
|
-
"compose": "append",
|
|
9
7
|
"description": "Salesforce CRM specialist: SOQL/SOSL analysis, safe record management, and knowledge-graph ingestion over the salesforce-agent MCP server.",
|
|
10
8
|
"metadata": {
|
|
11
9
|
"topic": "Salesforce CRM",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: salesforce-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.3
|
|
4
4
|
Summary: Salesforce REST/SOQL/Bulk API 2.0 connector + MCP Server + A2A Server for Agentic AI!
|
|
5
5
|
Author-email: Project Maintainers <maintainers@users.noreply.github.com>
|
|
6
6
|
License: MIT
|
|
@@ -12,14 +12,14 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Requires-Python: <3.15,>=3.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
15
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Provides-Extra: mcp
|
|
18
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
18
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
|
|
19
19
|
Provides-Extra: jwt
|
|
20
20
|
Requires-Dist: cryptography>=50.0.2; extra == "jwt"
|
|
21
21
|
Provides-Extra: all
|
|
22
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
22
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "all"
|
|
23
23
|
Requires-Dist: cryptography>=50.0.2; extra == "all"
|
|
24
24
|
Provides-Extra: test
|
|
25
25
|
Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
|
|
@@ -40,7 +40,7 @@ Dynamic: license-file
|
|
|
40
40
|

|
|
41
41
|

|
|
42
42
|
|
|
43
|
-
*Version: 2.3.
|
|
43
|
+
*Version: 2.3.3*
|
|
44
44
|
|
|
45
45
|
> **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
|
|
46
46
|
> server live on the docs site:
|
|
@@ -7,6 +7,7 @@ salesforce_agent/__init__.py
|
|
|
7
7
|
salesforce_agent/__main__.py
|
|
8
8
|
salesforce_agent/api_client.py
|
|
9
9
|
salesforce_agent/auth.py
|
|
10
|
+
salesforce_agent/connector_sources.py
|
|
10
11
|
salesforce_agent/kg_ingest.py
|
|
11
12
|
salesforce_agent/mcp_config.json
|
|
12
13
|
salesforce_agent/mcp_server.py
|
|
@@ -26,8 +27,6 @@ salesforce_agent/api/api_client_describe.py
|
|
|
26
27
|
salesforce_agent/api/api_client_query.py
|
|
27
28
|
salesforce_agent/api/api_client_records.py
|
|
28
29
|
salesforce_agent/connectors/__init__.py
|
|
29
|
-
salesforce_agent/connectors/mcp_source_presets.json
|
|
30
|
-
salesforce_agent/connectors/tool_schema_fingerprints.json
|
|
31
30
|
salesforce_agent/mcp/__init__.py
|
|
32
31
|
salesforce_agent/mcp/mcp_salesforce.py
|
|
33
32
|
salesforce_agent/ontology/__init__.py
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/entry_points.txt
RENAMED
|
@@ -10,8 +10,5 @@ salesforce-agent = salesforce_agent.prompts
|
|
|
10
10
|
[agent_connector_sdk.skill_providers]
|
|
11
11
|
salesforce-agent = salesforce_agent.skills
|
|
12
12
|
|
|
13
|
-
[agent_connector_sdk.source_connector_providers]
|
|
14
|
-
salesforce-agent = salesforce_agent.connectors
|
|
15
|
-
|
|
16
13
|
[console_scripts]
|
|
17
14
|
salesforce-mcp = salesforce_agent.mcp_server:mcp_server
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
1
|
+
agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
2
2
|
httpx>=0.28.1
|
|
3
3
|
|
|
4
4
|
[all]
|
|
5
|
-
agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
5
|
+
agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
6
6
|
cryptography>=50.0.2
|
|
7
7
|
|
|
8
8
|
[jwt]
|
|
9
9
|
cryptography>=50.0.2
|
|
10
10
|
|
|
11
11
|
[mcp]
|
|
12
|
-
agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
12
|
+
agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
13
13
|
|
|
14
14
|
[test]
|
|
15
15
|
pytest-xdist>=3.8.0
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from agent_connector_sdk.connector_identity import connector_name
|
|
5
6
|
import ast
|
|
6
|
-
import json
|
|
7
|
-
import re
|
|
8
7
|
import tomllib
|
|
9
8
|
from pathlib import Path
|
|
10
9
|
|
|
@@ -38,16 +37,6 @@ def test_connector_name_is_the_fleet_name() -> None:
|
|
|
38
37
|
assert pyproject["project"]["entry-points"]["agent_connector_sdk.connector"] == {
|
|
39
38
|
FLEET: "salesforce_agent"
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
if not manifest_path.is_file():
|
|
43
|
-
manifest_path = ROOT / "connector_manifest.yml"
|
|
44
|
-
manifest = manifest_path.read_text(encoding="utf-8")
|
|
45
|
-
match = re.search(r'^\s*"?connector"?\s*:\s*"?([^"\s,]+)', manifest, re.MULTILINE)
|
|
46
|
-
assert match is not None and match.group(1) == FLEET
|
|
47
|
-
fingerprints = PACKAGE / "connectors" / "tool_schema_fingerprints.json"
|
|
48
|
-
if fingerprints.is_file():
|
|
49
|
-
assert (
|
|
50
|
-
json.loads(fingerprints.read_text(encoding="utf-8"))["connector"] == FLEET
|
|
51
|
-
)
|
|
40
|
+
assert connector_name("salesforce_agent") == FLEET
|
|
52
41
|
for module in sorted(PACKAGE.glob("*.py")):
|
|
53
42
|
assert all(name == FLEET for name in _call_connectors(module)), module.name
|
|
@@ -70,7 +70,7 @@ async def test_ingest_entities_writes_nodes_and_edges(ingest):
|
|
|
70
70
|
a_record = next(r for r in request.records if r.record_id == "a")
|
|
71
71
|
assert a_record.payload["name"] == "Acme"
|
|
72
72
|
assert request.relationships[0].relation_reference.endswith(
|
|
73
|
-
"
|
|
73
|
+
"relations/Contact/worksAtAccount"
|
|
74
74
|
)
|
|
75
75
|
|
|
76
76
|
|
|
@@ -94,7 +94,7 @@ async def test_ingest_records_accounts_with_owner(ingest):
|
|
|
94
94
|
r.record_id == "salesforce:User:005U" for r in request.records
|
|
95
95
|
)
|
|
96
96
|
assert request.relationships[0].relation_reference.endswith(
|
|
97
|
-
"
|
|
97
|
+
"relations/Account/ownedBy"
|
|
98
98
|
)
|
|
99
99
|
|
|
100
100
|
|
|
@@ -114,7 +114,7 @@ async def test_ingest_records_contact_links_account(ingest):
|
|
|
114
114
|
# the SDK's persistence privacy guard redacts email-shaped values.
|
|
115
115
|
assert contact.payload["email"] == "[REDACTED_EMAIL]"
|
|
116
116
|
assert request.relationships[0].relation_reference.endswith(
|
|
117
|
-
"
|
|
117
|
+
"relations/Contact/worksAtAccount"
|
|
118
118
|
)
|
|
119
119
|
|
|
120
120
|
|
|
@@ -133,7 +133,7 @@ async def test_ingest_records_opportunity_links_account(ingest):
|
|
|
133
133
|
)
|
|
134
134
|
assert opp.payload["stageName"] == "Won"
|
|
135
135
|
assert request.relationships[0].relation_reference.endswith(
|
|
136
|
-
"
|
|
136
|
+
"relations/Opportunity/opportunityForAccount"
|
|
137
137
|
)
|
|
138
138
|
|
|
139
139
|
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_comment": "Tier-1 mcp_tool source presets for salesforce-agent (AU-KG.ingest.mcp-tool-connector). Syncs Salesforce CRM objects into the KG as documents via the salesforce-agent MCP server's salesforce_soql tool. Contributed presets win over the central MCP_TOOL_PRESETS. The native typed-node path is salesforce_ingest_crm / salesforce_agent.kg_ingest.",
|
|
3
|
-
"salesforce-accounts": {
|
|
4
|
-
"server": "salesforce-mcp",
|
|
5
|
-
"tool": "salesforce_soql_query",
|
|
6
|
-
"params": {
|
|
7
|
-
"soql": "SELECT Id, Name, Industry, Type, Website, Description FROM Account"
|
|
8
|
-
},
|
|
9
|
-
"records_path": "records",
|
|
10
|
-
"id_field": "Id",
|
|
11
|
-
"title_field": "Name",
|
|
12
|
-
"text_field": "Description",
|
|
13
|
-
"doc_type": "salesforce_account",
|
|
14
|
-
"params_style": "args"
|
|
15
|
-
},
|
|
16
|
-
"salesforce-opportunities": {
|
|
17
|
-
"server": "salesforce-mcp",
|
|
18
|
-
"tool": "salesforce_soql_query",
|
|
19
|
-
"params": {
|
|
20
|
-
"soql": "SELECT Id, Name, StageName, Amount, CloseDate, Description FROM Opportunity"
|
|
21
|
-
},
|
|
22
|
-
"records_path": "records",
|
|
23
|
-
"id_field": "Id",
|
|
24
|
-
"title_field": "Name",
|
|
25
|
-
"text_field": "Description",
|
|
26
|
-
"doc_type": "salesforce_opportunity",
|
|
27
|
-
"params_style": "args"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_describe.py
RENAMED
|
File without changes
|
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/api/api_client_records.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/fixtures/records.json
RENAMED
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/mappings/source.yaml
RENAMED
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/ontology/migrations/manifest.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/salesforce_input_models.py
RENAMED
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent/salesforce_response_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{salesforce_agent-2.3.2 → salesforce_agent-2.3.3}/salesforce_agent.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|