Skip to content

Commit 1cf720e

Browse files
feat: AL-213760: add warning and deprecation notice. cite 1.0.0rc2 (#73)
* add warning and deprecation notice. cite 1.0.0rc2 * bump pyproject versions * repeat major version announcement in each package * modify default tools for MCP. add instructions for reenabling.
1 parent 5a576ca commit 1cf720e

File tree

35 files changed

+605
-198
lines changed

35 files changed

+605
-198
lines changed

README.md

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ The MCP integration provides an MCP-compatible server that exposes Alation's con
5252
pip install uv
5353

5454
# Install the core SDK
55-
uv pip install alation-ai-agent-sdk==1.0.0rc1
55+
uv pip install alation-ai-agent-sdk==1.0.0rc2
5656

5757
# Install LangChain integration
58-
uv pip install alation-ai-agent-langchain==1.0.0rc1
58+
uv pip install alation-ai-agent-langchain==1.0.0rc2
5959

6060
# Install the MCP integration
61-
uv pip install alation-ai-agent-mcp==1.0.0rc1
61+
uv pip install alation-ai-agent-mcp==1.0.0rc2
6262

6363
```
6464

@@ -86,6 +86,32 @@ If you cannot obtain service account credentials (admin only), see the [User Acc
8686

8787
## New Major Version 1.x.x
8888

89+
#### Dec 10, 2025 Update
90+
`1.0.0rc2` version of the Alation AI Agent SDK is now available.
91+
92+
It deprecates the Context Tool in favor of the more capable Catalog Context Search Agent. On the practical side, Catalog Context Search Agent shares the same contract so any migrations should be straightforward.
93+
94+
We've committed to keep the now deprecated Context Tool as part of the SDK for the next **three months for transition**. This means you should expect to see it **removed in Feb 2026**.
95+
96+
The main rationale for removing the Context Tool originates from having two tools which do very similar things. When both are exposed to an LLM, the model often picks the less capable one leading to worse outcomes. By reducing the number of tools that overlap conceptually, we're avoiding the wrong tool selection.
97+
98+
The Catalog Context Search Agent will do all the things the Context Tool did AND more like dynamically construct the `signature` parameter which was a major bottleneck when using the Context Tool.
99+
100+
Our local MCP server was changed for the same reason and no longer includes Context Tool, Analyze Catalog Question, Signature Create, or Bulk Retrieval by default. The Catalog Context Search Agent will invoke these internally as needed without requiring them in scope.
101+
102+
If you have prompts that expect any of those specific tools, you'll need to tell the MCP server which tools you wish to have enabled (overriding the default set). This can be done as a command line argument or as an environment variable.
103+
104+
Reminder: If you have a narrow use case, only enable the tools that are needed for that particular case.
105+
106+
```bash
107+
# As command line arguments to the MCP server command
108+
--enabled-tools=alation_context,analyze_catalog_question,bulk_retrieval,generate_data_product,get_custom_fields_definitions,get_data_dictionary_instructions,data_product,get_signature_creation_instructions,catalog_context_search_agent,query_flow_agent,sql_query_agent
109+
110+
# Or as an environment variable
111+
export ALATION_ENABLED_TOOLS='alation_context,analyze_catalog_question,bulk_retrieval,generate_data_product,get_custom_fields_definitions,get_data_dictionary_instructions,data_product,get_signature_creation_instructions,catalog_context_search_agent,query_flow_agent,sql_query_agent'
112+
```
113+
114+
#### Nov 4, 2025 Update
89115
We're excited to announce the `1.0.0rc1` version of the Alation AI Agent SDK is available.
90116

91117
IMPORTANT: In a breaking change `user_account` is no longer supported as an authorization mode. We recommend you migrate to `service_account` or `bearer_token` modes.

python/CLAUDE.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ This is the Alation AI Agent SDK for Python, structured as a monorepo with three
88

99
### Core Packages
1010

11-
1. **core-sdk/** - `alation-ai-agent-sdk` (v1.0.0rc1)
11+
1. **core-sdk/** - `alation-ai-agent-sdk` (v1.0.0rc2)
1212
- Main SDK for accessing Alation Data Catalog metadata
1313
- Core functionality: context retrieval, data products, catalog asset updates
1414
- Source: `core-sdk/alation_ai_agent_sdk/`
1515

16-
2. **dist-langchain/** - `alation-ai-agent-langchain` (v1.0.0rc1)
16+
2. **dist-langchain/** - `alation-ai-agent-langchain` (v1.0.0rc2)
1717
- LangChain integration wrapper around the core SDK
1818
- Provides LangChain-compatible tools and toolkit
1919
- Source: `dist-langchain/alation_ai_agent_langchain/`
2020

21-
3. **dist-mcp/** - `alation-ai-agent-mcp` (v1.0.0rc1)
21+
3. **dist-mcp/** - `alation-ai-agent-mcp` (v1.0.0rc2)
2222
- Model Context Protocol (MCP) server implementation
2323
- Supports both STDIO and HTTP transport modes
2424
- Provides CLI entry point: `start-alation-mcp-server`
@@ -121,7 +121,7 @@ For MCP HTTP mode, authentication is handled per-request via OAuth bearer tokens
121121

122122
## Important Notes
123123

124-
- All three packages maintain synchronized version numbers (currently 1.0.0rc1)
124+
- All three packages maintain synchronized version numbers (currently 1.0.0rc2)
125125
- The core SDK is the foundation; LangChain and MCP packages depend on it
126126
- When making changes, ensure version bumps are coordinated across packages that are affected
127127
- The MCP server can run in two modes: STDIO (for direct MCP clients) and HTTP (for web integrations)

python/core-sdk/README.md

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,82 @@ This SDK provides a simple, programmatic way for AI applications to:
1010
- Search for and retrieve data products by product ID or natural language queries
1111
- Customize response formats using signature specifications
1212

13+
## New Major Version 1.x.x
14+
15+
#### Dec 10, 2025 Update
16+
`1.0.0rc2` version of the Alation AI Agent SDK is now available.
17+
18+
It deprecates the Context Tool in favor of the more capable Catalog Context Search Agent. On the practical side, Catalog Context Search Agent shares the same contract so any migrations should be straightforward.
19+
20+
We've committed to keep the now deprecated Context Tool as part of the SDK for the next **three months for transition**. This means you should expect to see it **removed in Feb 2026**.
21+
22+
The main rationale for removing the Context Tool originates from having two tools which do very similar things. When both are exposed to an LLM, the model often picks the less capable one leading to worse outcomes. By reducing the number of tools that overlap conceptually, we're avoiding the wrong tool selection.
23+
24+
The Catalog Context Search Agent will do all the things the Context Tool did AND more like dynamically construct the `signature` parameter which was a major bottleneck when using the Context Tool.
25+
26+
Our local MCP server was changed for the same reason and no longer includes Context Tool, Analyze Catalog Question, Signature Create, or Bulk Retrieval by default. The Catalog Context Search Agent will invoke these internally as needed without requiring them in scope.
27+
28+
If you have prompts that expect any of those specific tools, you'll need to tell the MCP server which tools you wish to have enabled (overriding the default set). This can be done as a command line argument or as an environment variable.
29+
30+
Reminder: If you have a narrow use case, only enable the tools that are needed for that particular case.
31+
32+
```bash
33+
# As command line arguments to the MCP server command
34+
--enabled-tools=alation_context,analyze_catalog_question,bulk_retrieval,generate_data_product,get_custom_fields_definitions,get_data_dictionary_instructions,data_product,get_signature_creation_instructions,catalog_context_search_agent,query_flow_agent,sql_query_agent
35+
36+
# Or as an environment variable
37+
export ALATION_ENABLED_TOOLS='alation_context,analyze_catalog_question,bulk_retrieval,generate_data_product,get_custom_fields_definitions,get_data_dictionary_instructions,data_product,get_signature_creation_instructions,catalog_context_search_agent,query_flow_agent,sql_query_agent'
38+
```
39+
40+
#### Nov 4, 2025 Update
41+
We're excited to announce the `1.0.0rc1` version of the Alation AI Agent SDK is available.
42+
43+
IMPORTANT: In a breaking change `user_account` is no longer supported as an authorization mode. We recommend you migrate to `service_account` or `bearer_token` modes.
44+
45+
The new major version comes with several notable changes that should make the transition worth it.
46+
- Alation Agent Studio Integration
47+
- Remote MCP Server
48+
- Catalog Search Context Agent
49+
- Streaming and Chat ID Support
50+
51+
### Alation Agent Studio Integration
52+
53+
The Alation Agent Studio gives you first class support for creating and leveraging the agents your business needs. Whether you're improving catalog curation or building data-centric query agents, the Agent Studio makes it easy to create agents, hone them, and deploy them across your enterprise. It includes a number of expert tools that are ready to be used or composed together as building blocks for more complex scenarios. And any precision agents you build are available within the SDK or MCP server as tools (See `custom_agent`).
54+
55+
### Remote MCP Server
56+
57+
We've heard from a number of customers that want the flexibility of MCP servers without the responsibility of having to install or upgrade the SDK. With our remote MCP server you don't have to do any of that. After a one time MCP focused authorization setup, it can be as simple as adding a remote MCP server to your favorite MCP client like: `https://<your_instance>/ai/mcp`
58+
59+
Note: MCP clients and platforms are rapidly evolving. Not all of them support authorization flows the same way nor path parameters etc. If you're running into blockers, please file an Issue so we can investigate and come up with a plan. We do not support dynamic client registration so please use an MCP client that allows you to pass in a `client_id` and `client_secret`.
60+
61+
#### Start Here
62+
63+
One issue the remote MCP server solves is listing tools dynamically. This dynamic portion is doing a lot of work for us. For instance, it can filter out tools the current user cannot use or it can list brand new tools the SDK doesn't even know about.
64+
65+
And since the tools are resolved lazily instead of statically, it means the API contracts for those tools can also be dynamic. This avoids client server version mismatches which could otherwise break static integrations.
66+
67+
We will continue to support the SDK and issue new versions regularly, but if you're after a less brittle more robust integration, you should consider integrating directly with the remote MCP server as a starting place.
68+
69+
### Catalog Search Context Agent
70+
71+
In the beginning of the Agent SDK we had only one tool: Alation Context. It offered a powerful way to dynamically select the right objects and their properties to best address a particular question. It's powerful `signature` parameter made it suitable for cases even without an user question (Bulk Retrieval). At the same time we saw a fair bit of friction with LLM generated `signature` parameters being invalid or just outright wrong. And a surprising amount of usage involved no `signature` at all which frequently resulted in poor results.
72+
73+
We've sought to address these issues by moving from a collection of these tools (`alation_context`, `bulk_retrieval`) into an agent that performs a series of checks and heuristics to dynamically create a `signature` when needed to take advantage of your custom fields. That is our new `catalog_search_context_agent`.
74+
75+
This should translate into fewer instructions you need to convince these tools to play nice with each other. And at the same time increase the accuracy of calls.
76+
77+
### Streaming and Chat ID Support
78+
79+
#### Streaming
80+
81+
All tools now support a streaming option. Primarily this benefits our local MCP server in http mode. If your MCP clients support streaming you should now see some of the internal processing of tools and agents to give you more transparency into what is happening under the hood.
82+
83+
By default the SDK has streaming disabled but it can be enabled if you have a use case for it. To enable it pass a `sdk_options=AgentSDKOptions(enable_streaming=True)` argument to the `AlationAIAgentSDK` constructor. When streaming you'll need to loop over the result or yield from it to correctly handle the underlying generator.
84+
85+
#### Chat ID
86+
87+
Most of our tools and agents accept the `chat_id` parameter when invoked. Including this will associate that tool call with any other prior calls referencing the same `chat_id`. Any `chat_id` compatible tool will include a `chat_id` in the response.
88+
1389
## Installation
1490

1591
```bash
@@ -43,7 +119,7 @@ sdk = AlationAIAgentSDK(
43119
)
44120

45121
# Ask a question about your data
46-
response = sdk.get_context(
122+
response = sdk.catalog_context_search_agent(
47123
"What tables contain sales information?"
48124
)
49125
print(response)
@@ -55,7 +131,7 @@ signature = {
55131
}
56132
}
57133

58-
response = sdk.get_context(
134+
response = sdk.catalog_context_search_agent(
59135
"What are the customer tables?",
60136
signature
61137
)

python/core-sdk/alation_ai_agent_sdk/api.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -753,13 +753,17 @@ def _sse_stream_or_last_event(
753753
"""
754754
if self.enable_streaming:
755755
# Streaming mode, yield events as they arrive
756-
yield from self._iter_sse_response(response, log_raw_stream_events=log_raw_stream_events)
756+
yield from self._iter_sse_response(
757+
response, log_raw_stream_events=log_raw_stream_events
758+
)
757759
else:
758760
# Non-streaming mode: collect all events and yield once.
759761
# WARNING: There are an awful lot of tokens returned here that aren't particularly applicable.
760762
# TBD: Maybe clean these up to only return the payload instead of the whole message etc.
761763
last_event = None
762-
for event in self._iter_sse_response(response, log_raw_stream_events=log_raw_stream_events):
764+
for event in self._iter_sse_response(
765+
response, log_raw_stream_events=log_raw_stream_events
766+
):
763767
last_event = event
764768
yield last_event
765769

@@ -790,7 +794,9 @@ def _safe_sse_post_request(
790794
logger.warning(
791795
f"At or nearing usage limits: {json.dumps(response_meta)}"
792796
)
793-
yield from self._sse_stream_or_last_event(response, log_raw_stream_events=log_raw_stream_events)
797+
yield from self._sse_stream_or_last_event(
798+
response, log_raw_stream_events=log_raw_stream_events
799+
)
794800
except requests.exceptions.ReadTimeout as e:
795801
logger.error(f"Read timed out while using {tool_name}: {e}")
796802
self._handle_request_error(
@@ -922,7 +928,9 @@ def get_data_products(
922928
)
923929
response.raise_for_status()
924930
response_data = response.json()
925-
if response_data and (data_products := response_data.get("results", [])):
931+
if response_data and (
932+
data_products := response_data.get("results", [])
933+
):
926934
instructions = (
927935
f"Found {len(data_products)} data product{'s' if len(data_products) > 1 else ''} matching your query. "
928936
"The following contains summary information (name, id, description, url) for each product. "

python/core-sdk/alation_ai_agent_sdk/lineage_filtering.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@ def get_node_object_key(node: LineageGraphNode) -> str:
2424
return f"{node['otype']}:{node['id']}"
2525

2626

27-
def recursively_process_neighbors(node: LineageGraphNode, key_to_node: Dict[str, LineageGraphNode]) -> Dict[str, LineageGraphNode]:
27+
def recursively_process_neighbors(
28+
node: LineageGraphNode, key_to_node: Dict[str, LineageGraphNode]
29+
) -> Dict[str, LineageGraphNode]:
2830
node_key = get_node_object_key(node)
2931
if node_key not in key_to_node:
30-
if 'neighbors' not in node:
31-
node['neighbors'] = []
32+
if "neighbors" not in node:
33+
node["neighbors"] = []
3234
key_to_node[node_key] = node
3335
for neighbor_node in node.get("neighbors", []):
3436
key_to_node = recursively_process_neighbors(neighbor_node, key_to_node)
3537
return key_to_node
3638

39+
3740
def get_initial_graph_state(
3841
nodes: List[Dict],
3942
) -> tuple[List[str], Dict[str, Dict], Set[str]]:
@@ -53,8 +56,8 @@ def get_initial_graph_state(
5356
key_to_node = {}
5457
for node in nodes:
5558
node_key = get_node_object_key(node)
56-
if 'neighbors' not in node:
57-
node['neighbors'] = []
59+
if "neighbors" not in node:
60+
node["neighbors"] = []
5861
key_to_node[node_key] = node
5962
ordered_keys.append(node_key)
6063
# Iterate over all neighbors in case they aren't listed at the top level.

0 commit comments

Comments
 (0)